# must be first
include config.mak
-TARGET = rlm_mysql
-SRCS = rlm_mysql.c mysql.c
-HEADERS = rlm_mysql.h
+TARGET = rlm_sql
+SRCS = rlm_sql.c sql.c
+HEADERS = rlm_sql.h
RLM_CFLAGS =
LIBS = -lmysqlclient
-/* cistron mysql module
+/* mysql part of sql module for freeradius (www.freeradius.org)
* Mike Machado
* InnerCite
* mike@innercite.com
*/
-
-#define SQLBIGREC 32
-#define SQLLILREC 16
-#define QUERYLOG "/var/log/radacct/radius.sql"
-#define MYSQLCONFIG "radius.conf"
-#define MYSQLBACKUP "/var/log/radacct/sqlbackup.dat"
-
-#define PW_VP_USERDATA 1
-#define PW_VP_GROUPDATA 2
-
-typedef struct mysqlrec {
- char AcctSessionId[SQLBIGREC];
- char UserName[SQLBIGREC];
- char Realm[SQLBIGREC];
- char NASIPAddress[SQLLILREC];
- unsigned long NASPortId;
- char NASPortType[SQLBIGREC];
- char AcctStatusType[SQLBIGREC];
- unsigned int AcctStatusTypeId;
- char AcctTimeStamp[20];
- unsigned long AcctSessionTime;
- char AcctAuthentic[SQLBIGREC];
- char ConnectInfo[SQLBIGREC];
- unsigned long AcctInputOctets;
- unsigned long AcctOutputOctets;
- char CalledStationId[SQLLILREC];
- char CallingStationId[SQLLILREC];
- char AcctTerminateCause[SQLBIGREC];
- char ServiceType[SQLBIGREC];
- char FramedProtocol[SQLBIGREC];
- char FramedIPAddress[SQLLILREC];
- unsigned long AcctDelayTime;
-} MYSQLREC;
-
-#define SQL_LOCK_LEN sizeof(MYSQLREC)
-#define MAX_TABLE_LEN 20
-#define MAX_AUTH_QUERY_LEN 256
-char mysql_server[40];
-char mysql_login[20];
-char mysql_password[20];
-char mysql_db[20];
-char mysql_acct_table[MAX_TABLE_LEN];
-char mysql_authcheck_table[MAX_TABLE_LEN];
-char mysql_authreply_table[MAX_TABLE_LEN];
-char mysql_groupcheck_table[MAX_TABLE_LEN];
-char mysql_groupreply_table[MAX_TABLE_LEN];
-char mysql_usergroup_table[MAX_TABLE_LEN];
-char mysql_realm_table[MAX_TABLE_LEN];
-char mysql_realmgroup_table[MAX_TABLE_LEN];
-char mysql_nas_table[MAX_TABLE_LEN];
-char mysql_dict_table[MAX_TABLE_LEN];
-int mysql_keepopen;
-int sqltrace;
-MYSQL *MyAuthSock;
-MYSQL *MyAcctSock;
-MYSQL MyAuthConn;
-MYSQL MyAcctConn;
-int mysql_start();
-int mysql_save_acct(MYSQLREC *sqlrecord);
-int mysql_userparse(VALUE_PAIR **first_pair, MYSQL_ROW row);
-int mysql_checksocket(const char *facility);
-int mysql_getvpdata(char *table, VALUE_PAIR **vp, char *user, int mode);
-int mysql_check_multi(char *name, VALUE_PAIR *request, int maxsimul);
+typedef SQLSOCK MYSQL;
+typedef SQL_ROW MYSQL_ROW;
+typedef SQL_RES MYSQL_RES;
* start of main routines
***********************************************************************/
-static int icradius_init(int rehup) {
+static int rlm_sql_init(int rehup) {
FILE *sqlfd;
char dummystr[64];
int line_no;
char buffer[256];
char sqlfile[256];
+ SQL *sql;
+
+ if ((sql = malloc(sizeof(SQL))) == NULL) {
+ log(L_ERR|L_CONS, "no memory");
+ exit(1);
+ }
- strcpy(sql_server,"localhost");
- strcpy(sql_login,"");
- strcpy(sql_password,"");
- strcpy(sql_db,"radius");
- strcpy(sql_authcheck_table,"radcheck");
- strcpy(sql_authreply_table,"radreply");
- strcpy(sql_groupcheck_table,"radgroupcheck");
- strcpy(sql_groupreply_table,"radgroupreply");
- strcpy(sql_usergroup_table,"usergroup");
- strcpy(sql_realmgroup_table,"realmgroup");
- strcpy(sql_acct_table,"radacct");
- strcpy(sql_nas_table,"nas");
- strcpy(sql_realm_table, "realms");
- strcpy(sql_dict_table,"dictionary");
- sqltrace = 0;
- sql_keepopen = 0;
-
- sprintf(sqlfile, "%s/%s", radius_dir, MYSQLCONFIG);
+ strcpy(sql->config.sql_server,"localhost");
+ strcpy(sql->config.sql_login,"");
+ strcpy(sql->config.sql_password,"");
+ strcpy(sql->config.sql_db,"radius");
+ strcpy(sql->config.sql_authcheck_table,"radcheck");
+ strcpy(sql->config.sql_authreply_table,"radreply");
+ strcpy(sql->config.sql_groupcheck_table,"radgroupcheck");
+ strcpy(sql->config.sql_groupreply_table,"radgroupreply");
+ strcpy(sql->config.sql_usergroup_table,"usergroup");
+ strcpy(sql->config.sql_realmgroup_table,"realmgroup");
+ strcpy(sql->config.sql_acct_table,"radacct");
+ strcpy(sql->config.sql_nas_table,"nas");
+ strcpy(sql->config.sql_realm_table, "realms");
+ strcpy(sql->config.sql_dict_table,"dictionary");
+ sql->config.sqltrace = 0;
+ sql->config.sql_keepopen = 0;
+
+ sprintf(sqlfile, "%s/%s", radius_dir, SQLCONFIGFILE);
if((sqlfd = fopen(sqlfile, "r")) == (FILE *)NULL) {
- log(L_ERR,"could not read mysql configuration file %s",sqlfile);
+ log(L_ERR,"could not read sql configuration file %s",sqlfile);
return(-1);
}
continue;
}
+ if(strncasecmp(buffer, "type", 4) == 0) {
+ /* Read the SERVER line */
+ if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
+ log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
+ } else {
+ strcpy(sql->config.sql_type,namestr);
+ }
+ }
if(strncasecmp(buffer, "server", 6) == 0) {
/* Read the SERVER line */
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strcpy(sql_server,namestr);
+ strcpy(sql->config.sql_server,namestr);
+ }
+ }
+ if(strncasecmp(buffer, "port", 4) == 0) {
+ /* Read the SERVER line */
+ if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
+ log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
+ } else {
+ sql->config.sql_port = strtol(namestr, (char **)NULL, 10);
}
}
if(strncasecmp(buffer, "login", 5) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strcpy(sql_login,namestr);
+ strcpy(sql->config.sql_login,namestr);
}
}
if(strncasecmp(buffer, "password", 8) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strcpy(sql_password,namestr);
+ strcpy(sql->config.sql_password,namestr);
}
}
if(strncasecmp(buffer, "radius_db", 9) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strcpy(sql_db,namestr);
+ strcpy(sql->config.sql_db,namestr);
}
}
if(strncasecmp(buffer, "authcheck_table", 15) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_authcheck_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_authcheck_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "authreply_table", 15) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_authreply_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_authreply_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "groupcheck_table", 16) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_groupcheck_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_groupcheck_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "groupreply_table", 16) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_groupreply_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_groupreply_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "usergroup_table", 15) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_usergroup_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_usergroup_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "realmgroup_table", 16) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_realmgroup_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_realmgroup_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "acct_table", 10) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_acct_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_acct_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "nas_table", 9) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_nas_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_nas_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "realm_table", 9) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_realm_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_realm_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "dict_table", 9) == 0) {
if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
- strncpy(sql_dict_table,namestr, MAX_TABLE_LEN);
+ strncpy(sql->config.sql_dict_table,namestr, MAX_TABLE_LEN);
}
}
if(strncasecmp(buffer, "sqltrace", 8) == 0) {
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
if(strncasecmp(namestr, "on", 2) == 0) {
- sqltrace = 1;
+ sql->config.sqltrace = 1;
} else {
- sqltrace = 0;
+ sql->config.sqltrace = 0;
}
}
}
log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
} else {
if(strncasecmp(namestr, "yes", 3) == 0) {
- sql_keepopen = 1;
+ sql->config.sql_keepopen = 1;
} else {
- sql_keepopen = 0;
+ sql->config.sql_keepopen = 0;
}
}
}
fclose(sqlfd);
log(L_INFO,"SQL: Attempting to connect to %s@%s:%s",
- sql_login,
- sql_server,
- sql_db);
+ sql->config.sql_login,
+ sql->config.sql_server,
+ sql->config.sql_db);
if (sql_keepopen) {
- /* Connect to the database server */
- mysql_init(&MyAuthConn);
- if (!(MyAuthSock = mysql_real_connect(&MyAuthConn, mysql_server, mysql_login, mysql_password, mysql_db, 0, NULL, 0))) {
- log(L_ERR, "Init: Couldn't connect authentication socket to MySQL server on %s as %s", mysql_server, mysql_login);
- MyAuthSock = NULL;
- }
- mysql_init(&MyAcctConn);
- if (!(MyAcctSock = mysql_real_connect(&MyAcctConn, mysql_server, mysql_login, mysql_password, mysql_db, 0, NULL, 0))) {
- log(L_ERR, "Init: Couldn't connect accounting socket to MySQL server on %s as %s", mysql_server, mysql_login);
- MyAcctSock = NULL;
- }
- }
+ sql_connect(sql);
return 0;
}
/* globally exported name */
module_t rlm_module = {
- "icradius",
- 0, /* type: reserved */
- icradius_init, /* initialization */
- icradius_authorize, /* authorization */
- icradius_authenticate, /* authentication */
- icradius_accounting, /* accounting */
- icradius_detach, /* detach */
+ "rlm_sql",
+ 0, /* type: reserved */
+ rlm_sql_init, /* initialization */
+ rlm_sql_authorize, /* authorization */
+ rlm_sql_authenticate, /* authentication */
+ rlm_sql_accounting, /* accounting */
+ rlm_sql_detach, /* detach */
};
-/* cistron mysql module
+/* freeradius sql module
* Mike Machado
* InnerCite
* mike@innercite.com
*/
-
-#define SQLBIGREC 32
-#define SQLLILREC 16
#define QUERYLOG "/var/log/radacct/radius.sql"
#define SQLCONFIGFILE "radius.conf"
#define SQLBACKUP "/var/log/radacct/sqlbackup.dat"
+#define SQLBIGREC 32
+#define SQLLILREC 16
#define PW_VP_USERDATA 1
#define PW_VP_GROUPDATA 2
-typedef struct mysqlrec {
+#define MAX_TABLE_LEN 20
+#define MAX_AUTH_QUERY_LEN 256
+
+typedef struct sqlrec {
char AcctSessionId[SQLBIGREC];
char UserName[SQLBIGREC];
char Realm[SQLBIGREC];
char FramedProtocol[SQLBIGREC];
char FramedIPAddress[SQLLILREC];
unsigned long AcctDelayTime;
-} MYSQLREC;
-
-#define SQL_LOCK_LEN sizeof(MYSQLREC)
-#define MAX_TABLE_LEN 20
-#define MAX_AUTH_QUERY_LEN 256
+} SQLREC;
typedef struct sqlconfig {
+ char sql_type[40];
char sql_server[40];
+ int sql_port;
char sql_login[20];
char sql_password[20];
char sql_db[20];
int sqltrace;
} SQLCONFIG;
-MYSQL *MyAuthSock;
-MYSQL *MyAcctSock;
-MYSQL MyAuthConn;
-MYSQL MyAcctConn;
+typedef struct sql {
+ SQLSOCK *AuthSock;
+ SQLSOCK *AcctSock;
+ SQLREC sqlrecord;
+ SQLCONFIG config;
+} SQL;
+
+#define SQL_LOCK_LEN sizeof(SQLREC)
int sql_start();
int sql_save_acct(MYSQLREC *sqlrecord);
#include <errno.h>
#include <sys/wait.h>
-#include "rlm_mysql.h"
+#include "rlm_sql.h"
#include "radiusd.h"
+
/*************************************************************************
*
- * Function: mysql_start
+ * Function: sql_connect
*
- * Purpose: Reads in MySQL Config File
+ * Purpose: Connect to the SQL dataase
*
*************************************************************************/
+int sql_conenct(SQL *sql) {
-int mysql_start ()
-{
- FILE *sqlfd;
- char dummystr[64];
- char namestr[64];
- int line_no;
- char buffer[256];
- char sqlfile[256];
- MyAuthSock = NULL;
- MyAcctSock = NULL;
-
- strcpy(mysql_server,"localhost");
- strcpy(mysql_login,"");
- strcpy(mysql_password,"");
- strcpy(mysql_db,"radius");
- strcpy(mysql_authcheck_table,"radcheck");
- strcpy(mysql_authreply_table,"radreply");
- strcpy(mysql_groupcheck_table,"radgroupcheck");
- strcpy(mysql_groupreply_table,"radgroupreply");
- strcpy(mysql_usergroup_table,"usergroup");
- strcpy(mysql_realmgroup_table,"realmgroup");
- strcpy(mysql_acct_table,"radacct");
- strcpy(mysql_nas_table,"nas");
- strcpy(mysql_realm_table, "realms");
- strcpy(mysql_dict_table,"dictionary");
- sqltrace = 0;
- mysql_keepopen = 0;
-
- sprintf(sqlfile, "%s/%s", radius_dir, MYSQLCONFIG);
- if((sqlfd = fopen(sqlfile, "r")) == (FILE *)NULL) {
- log(L_ERR,"could not read mysql configuration file %s",sqlfile);
- return(-1);
- }
-
- line_no = 0;
- while(fgets(buffer, sizeof(buffer), sqlfd) != (char *)NULL) {
- line_no++;
-
- /* Skip empty space */
- if(*buffer == '#' || *buffer == '\0' || *buffer == '\n') {
- continue;
- }
+ MYSQL MyAuthConn;
+ MYSQL MyAcctConn;
+
+ /* 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))) {
+ log(L_ERR, "Init: Couldn't connect authentication socket to SQL server %s@%s", sql->config.sql_login, sql->config.sql_server);
+ sql->AuthSock = NULL;
+ return 0;
+ }
+ mysql_init(&MyAcctConn);
- if(strncasecmp(buffer, "server", 6) == 0) {
- /* Read the SERVER line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strcpy(mysql_server,namestr);
- }
- }
- if(strncasecmp(buffer, "login", 5) == 0) {
- /* Read the LOGIN line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strcpy(mysql_login,namestr);
- }
- }
- if(strncasecmp(buffer, "password", 8) == 0) {
- /* Read the PASSWORD line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strcpy(mysql_password,namestr);
- }
- }
- if(strncasecmp(buffer, "radius_db", 9) == 0) {
- /* Read the RADIUS_DB line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strcpy(mysql_db,namestr);
- }
- }
- if(strncasecmp(buffer, "authcheck_table", 15) == 0) {
- /* Read the AUTHCHECK_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_authcheck_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "authreply_table", 15) == 0) {
- /* Read the AUTHREPLY_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_authreply_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "groupcheck_table", 16) == 0) {
- /* Read the GROUPCHECK_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_groupcheck_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "groupreply_table", 16) == 0) {
- /* Read the GROUP_REPLY_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_groupreply_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "usergroup_table", 15) == 0) {
- /* Read the USERGROUP_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_usergroup_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "realmgroup_table", 16) == 0) {
- /* Read the REALMGROUP_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_realmgroup_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "acct_table", 10) == 0) {
- /* Read the ACCT_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_acct_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "nas_table", 9) == 0) {
- /* Read the NAS_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_nas_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "realm_table", 9) == 0) {
- /* Read the REALM_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_realm_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "dict_table", 9) == 0) {
- /* Read the DICT_TABLE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- strncpy(mysql_dict_table,namestr, MAX_TABLE_LEN);
- }
- }
- if(strncasecmp(buffer, "sqltrace", 8) == 0) {
- /* Read the SQLTRACE line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- if(strncasecmp(namestr, "on", 2) == 0) {
- sqltrace = 1;
- } else {
- sqltrace = 0;
- }
- }
- }
- if(strncasecmp(buffer, "keepopen", 8) == 0) {
- /* Read the KEEPOPEN line */
- if(sscanf(buffer, "%s%s", dummystr, namestr) != 2) {
- log(L_ERR,"invalid attribute on line %d of sqlserver file %s", line_no,sqlfile);
- } else {
- if(strncasecmp(namestr, "yes", 3) == 0) {
- mysql_keepopen = 1;
- } else {
- mysql_keepopen = 0;
- }
- }
- }
-
- }
- fclose(sqlfd);
-
- log(L_INFO,"MYSQL: Attempting to connect to %s:%s as %s",
- mysql_server,
- mysql_db,
- mysql_login);
-
- if (mysql_keepopen) {
- /* Connect to the database server */
- mysql_init(&MyAuthConn);
- if (!(MyAuthSock = mysql_real_connect(&MyAuthConn, mysql_server, mysql_login, mysql_password, mysql_db, 0, NULL, 0))) {
- log(L_ERR, "Init: Couldn't connect authentication socket to MySQL server on %s as %s", mysql_server, mysql_login);
- MyAuthSock = NULL;
- }
- mysql_init(&MyAcctConn);
- if (!(MyAcctSock = mysql_real_connect(&MyAcctConn, mysql_server, mysql_login, mysql_password, mysql_db, 0, NULL, 0))) {
- log(L_ERR, "Init: Couldn't connect accounting socket to MySQL server on %s as %s", mysql_server, mysql_login);
- MyAcctSock = NULL;
- }
- }
-
- return 0;
+ 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))) {
+ log(L_ERR, "Init: Couldn't connect accounting socket to SQL server %s@%s", sql->config.sql_login, sql->config.sql_server);
+ sql->AcctSock = NULL;
+ return 0;
+ }
}
-
+
/*************************************************************************
*
- * Function: mysql_save_acct
+ * Function: sql_save_acct
*
* Purpose: Write data from the sqlrecord structure to the database
*
*************************************************************************/
-int mysql_save_acct(MYSQLREC *sqlrecord) {
+int sql_save_acct(SQL *sql) {
char querystr[2048];
FILE *mysqlfile;
FILE *backupfile;
int num = 0;
- MYSQL_RES *result;
+ SQL_RES *result;
#ifdef NT_DOMAIN_HACK
char *ptr;
char newname[AUTH_STRING_LEN];
}
#endif /* NT_DOMAIN_HACK */
- if (mysql_checksocket("Acct")) {
+ if (sql_checksocket("Acct")) {
if (sqlrecord->AcctStatusTypeId == PW_STATUS_ACCOUNTING_ON || sqlrecord->AcctStatusTypeId == PW_STATUS_ACCOUNTING_OFF) {
log(L_INFO, "Portmaster %s rebooted at %s", sqlrecord->NASIPAddress, sqlrecord->AcctTimeStamp);