Hi,
I just put it in the body of the email, rather than as a MIME attachment
because that is what the HOWTO on contributing patches suggests. I should
have said I 'included' it rather than 'attached' it.
You can download it from:
http://www.axion-it.net/download/sql.c.patch
At 09:45 AM 1/15/2002 -0600, you wrote:
>Where is the attachment?
>
>Thanks
>Chris
>
>-----Original Message-----
>From: [EMAIL PROTECTED]
>[mailto:[EMAIL PROTECTED]] On Behalf Of Randy
>Moore
>Sent: Sunday, January 13, 2002 4:28 PM
>To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
>Cc: [EMAIL PROTECTED]
>Subject: Patch for using multiple group reply attributes from SQL.
>
>Hi All,
>
>I've attached a patch for the src/modules/rlm_sql/sql.c file.
>
>This patch fixes (I hope) 2 related problems. First, as pointed out by
>[EMAIL PROTECTED] back in mid December, the logic in the
>sql_userparse subroutine does not allow for multiple reply pairs for a
>single attribute from the radgroupreply table. This patch fixes this by
>
>explicitly checking to see if the attribute in question has an op value
>of
>"+=".
>
>Second, the Ascend Binary Filter attribute types could not be added
>because
>the wrong(??) DEFINE value was being checked. I'm guessing that the name
>
>used to be BINARY_FILTERS, but was later changed to ASCEND_BINARY
>everywhere but here? The string BINARY_FILTERS does not seem to appear
>anywhere else in the distribution but this one subroutine.
>
>This patch also splits a variable "mode" that was serving two different
>functions in this subroutine into two separate variables "querymode" and
>
>"pairmode". Hopefully, this makes the code more understandable.
>
>In testing this change, I noticed another small problem with handling
>reply
>items from SQL. According to the docs, the "==" operator is not allowed
>as
>a reply item. This is being permitted, probably to keep everyone sane
>since the ability to add anything but the default '==' was just
>added. From the "radreply" table, it seems that the operator "=="
>should
>probably be treated as if it were just "=", but it is behaving like "+="
>
>instead. This is pretty trivial, but I thought I'd mention it.
>
>Hope this is useful.
>
>--- sql.c.orig Sun Jan 13 14:04:20 2002
>+++ sql.c Sun Jan 13 16:56:02 2002
>@@ -240,38 +240,37 @@
> * Purpose: Read entries from the database and fill VALUE_PAIR
>structures
> *
>
>************************************************************************
>*/
>-int sql_userparse(VALUE_PAIR ** first_pair, SQL_ROW row, int mode) {
>+int sql_userparse(VALUE_PAIR ** first_pair, SQL_ROW row, int querymode)
>{
>
> DICT_ATTR *attr;
> VALUE_PAIR *pair, *check;
> char *ptr;
> char buf[128];
>+ int pairmode = T_EOL;
>
> if ((attr = dict_attrbyname(row[2])) == (DICT_ATTR *) NULL) {
> radlog(L_ERR | L_CONS, "rlm_sql: unknown attribute %s",
>row[2]);
> return (-1);
> }
>
>+ if (row[4] != NULL && strlen(row[4]) > 0) {
>+ ptr = row[4];
>+ pairmode = gettoken(&ptr, buf, sizeof(buf));
>+ }
>+ if (pairmode <= T_EOL) pairmode = T_OP_CMP_EQ;
>+
> /*
> * 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->attr)) != NULL &&
>-#if defined( BINARY_FILTERS )
>+ if (pairmode != T_OP_ADD && (check = pairfind(*first_pair,
>attr->attr))
>!= NULL &&
>+#ifdef ASCEND_BINARY
> attr->type != PW_TYPE_ABINARY &&
> #endif
>- mode == PW_VP_GROUPDATA)
>+ querymode == PW_VP_GROUPDATA)
> return 0;
>
>- if (row[4] != NULL && strlen(row[4]) > 0) {
>- ptr = row[4];
>- if ((mode = gettoken(&ptr, buf, sizeof(buf))) <= T_EOL)
>- mode = T_OP_CMP_EQ;
>- } else {
>- mode = T_OP_CMP_EQ;
>- }
>-
>- pair = pairmake(row[2], row[3], mode);
>+ pair = pairmake(row[2], row[3], pairmode);
> pairadd(first_pair, pair);
>
> return 0;
>Randy Moore
>Axion Information Technologies, Inc.
>
>email [EMAIL PROTECTED]
>phone 301-408-1200
>fax 301-445-3947
>
>
>-
>List info/subscribe/unsubscribe? See
>http://www.freeradius.org/list/users.html
>
>
>
>
>-
>List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
Randy Moore
Axion Information Technologies, Inc.
email [EMAIL PROTECTED]
phone 301-408-1200
fax 301-445-3947
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html