*************************************************************************/
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) {
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;
/* 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;
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;
}
}
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;
+
+}
+
/*************************************************************************
*
* 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;
}
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;
}
* 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);
}
* 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);
}
* 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);
}
*************************************************************************/
char *sql_error(SQLSOCK *socket) {
- return (mysql_error(socket));
+ return (mysql_error(socket->conn));
}
*************************************************************************/
int sql_close(SQLSOCK *socket) {
- return mysql_close(socket);
+ return mysql_close(socket->conn);
}