Sorry I missed the point...
Yes, you are correct about 'passwd != ""' my mistake.. I should have be using
strncmp.
This is what the diff should be:
--- raddauth.c 2007-12-13 00:38:24.000000000 -0800
+++ login_radius/raddauth.c 2007-12-13 00:31:35.000000000 -0800
@@ -117,6 +117,7 @@
int retries;
int sockfd;
int timeout;
+char *radius_port;
in_addr_t alt_server;
in_addr_t auth_server;
@@ -168,6 +169,10 @@
timeout = login_getcapnum(lc, "radius-timeout", 2, 2);
retries = login_getcapnum(lc, "radius-retries", 6, 6);
+ radius_port = login_getcapstr(lc, "radius-port", NULL, NULL);
+
+ if (radius_port == NULL) radius_port = "radius";
+
if (timeout < 1)
timeout = 1;
if (retries < 2)
@@ -190,7 +195,7 @@
passwd = getpass("Password:");
} else
passwd = password;
- if (passwd == NULL)
+ if (passwd == NULL)
passwd = "";
if ((v = login_getcapstr(lc, "radius-server", NULL, NULL)) == NULL){
@@ -207,9 +212,9 @@
alt_retries = retries/2;
retries >>= 1;
}
-
+
/* get port number */
- svp = getservbyname ("radius", "udp");
+ svp = getservbyname (radius_port, "udp");
if (svp == NULL) {
*emsg = "No such service: radius/udp";
return (1);
@@ -271,7 +276,7 @@
}
}
- if (retries > 0) {
+ if (retries > 0 && strncmp(passwd, "", 1) != 0) {
rad_request(req_id, userstyle, passwd, auth_port, vector,
pwstate);
@@ -417,9 +422,9 @@
auth.length = htons(total_length);
/* get radius port number */
- rad_port = getservbyname("radius", "udp");
+ rad_port = getservbyname(radius_port, "udp");
if (rad_port == NULL)
- errx(1, "no such service: radius/udp");
+ errx(1, "no such service: %s/udp", radius_port);
memset(&sin, 0, sizeof (sin));
sin.sin_family = AF_INET;
> -----Original Message-----
> From: [EMAIL PROTECTED]
> Sent: Wed, 12 Dec 2007 19:35:36 +0100
> To: [EMAIL PROTECTED]
> Subject: Re: login_radius possible changes.
>
> On Wed, Dec 12, 2007 at 08:47:54AM -0800, Brad Arrington wrote:
>
>> Hi Otto,
>>
>> Thank you for looking at this.
>>
>> My question is now what would be the right way to do this...?
>>
>> This radius server(AAA) has a 3 try lock out.
>> Without this patch login_radius checks 2 times with a blank password
>> which will allow the user only 1 chance to enter a correct password
>> before it locks the account.
>
> You are comparing pointers, not strings.
>
> -Otto
>>
>>
>> -Brad
>>
>>> -----Original Message-----
>>> From: [EMAIL PROTECTED]
>>> Sent: Wed, 12 Dec 2007 10:28:13 +0100
>>> To: [EMAIL PROTECTED]
>>> Subject: Re: login_radius possible changes.
>>>
>>> On Wed, Dec 12, 2007 at 12:40:15AM -0800, Brad Arrington wrote:
>>>
>>>> Would it be possible to change login_radius.c actually raddauth.c so
>>>> that:
>>>>
>>>> 1. The admin can change what port login_radius uses, such as the
>>>> old datametrics port. It is currently hard coded to radius(1812).
>>>>
>>>> 2. Make it so it does not try an empty password 2 times before it
>>>> kicks
>>>> back a
>>>> prompt asking for a password.
>>>>
>>>> This is the diff/changes I had in mind.
>>>>
>>>> --- radius_current/raddauth.c Tue Dec 11 12:28:41 2007
>>>> +++ raddauth.c Wed Dec 12 00:29:43 2007
>>>> @@ -117,6 +117,7 @@
>>>> int retries;
>>>> int sockfd;
>>>> int timeout;
>>>> +char *radius_port;
>>>> in_addr_t alt_server;
>>>> in_addr_t auth_server;
>>>>
>>>> @@ -168,6 +169,10 @@
>>>>
>>>> timeout = login_getcapnum(lc, "radius-timeout", 2, 2);
>>>> retries = login_getcapnum(lc, "radius-retries", 6, 6);
>>>> + radius_port = login_getcapstr(lc, "radius-port", NULL, NULL);
>>>> +
>>>> + if (radius_port == NULL) radius_port = "radius";
>>>> +
>>>> if (timeout < 1)
>>>> timeout = 1;
>>>> if (retries < 2)
>>>> @@ -209,7 +214,7 @@
>>>> }
>>>>
>>>> /* get port number */
>>>> - svp = getservbyname ("radius", "udp");
>>>> + svp = getservbyname (radius_port, "udp");
>>>> if (svp == NULL) {
>>>> *emsg = "No such service: radius/udp";
>>>> return (1);
>>>> @@ -271,7 +276,7 @@
>>>> }
>>>> }
>>>>
>>>> - if (retries > 0) {
>>>> + if (retries > 0 && passwd != "") {
>>>
>>> That cannot be right
>>>
>>>> rad_request(req_id, userstyle, passwd, auth_port, vector,
>>>> pwstate);
>>>>
>>>> @@ -417,9 +422,9 @@
>>>> auth.length = htons(total_length);
>>>>
>>>> /* get radius port number */
>>>> - rad_port = getservbyname("radius", "udp");
>>>> + rad_port = getservbyname(radius_port, "udp");
>>>> if (rad_port == NULL)
>>>> - errx(1, "no such service: radius/udp");
>>>> + errx(1, "no such service: %s/udp", radius_port);
>>>>
>>>> memset(&sin, 0, sizeof (sin));
>>>> sin.sin_family = AF_INET;
>>>>
>>>>
>>>> Thanks,
>>>> -Brad