AUTHINFO SIMPLE and PASS

Julien ÉLIE julien at trigofacile.com
Tue Aug 26 18:11:21 UTC 2008


Hi Russ,

> Looks like we added AUTHINFO SIMPLE support when
> readers.conf landed and got it completely wrong.
>
> Well, that answers the question of whether anyone is using it.  INN didn't
> support AUTHINFO SIMPLE until 2.3, and never supported it as specified in
> RFC 2980.  I vote we just delete it.

All right.
I have just deleted the code but not committed yet.
In fact, I wonder what is the use of PERMpass.

~/work/inn/trunk% grep -r PERMpass *
nnrpd/commands.c:    strlcpy(PERMpass, fields[3], sizeof(PERMpass));
nnrpd/commands.c:        if (strcmp(User, PERMuser) == 0 && strcmp(Password, PERMpass) == 0) {
nnrpd/nnrpd.h:EXTERN char       PERMpass[SMBUF];

The first one is used for AUTHINFO GENERIC and the second one for AUTHINFO USER/PASS

        if (strcmp(User, PERMuser) == 0 && strcmp(Password, PERMpass) == 0) {
            syslog(L_NOTICE, "%s user %s", Client.host, PERMuser);
            if (LLOGenable) {
                fprintf(locallog, "%s user (%s):%s\n", Client.host, Username, PERMuser);
                fflush(locallog);
            }
            Reply("%d Ok\r\n", NNTP_OK_AUTHINFO);
            PERMneedauth = false;
            PERMauthorized = true;
            PERMcanauthenticate = false;
            return;
        }

        errorstr[0] = '\0';

        PERMlogin(User, Password, errorstr);
        PERMgetpermissions();
        /* Authentication is successful. */
        if (!PERMneedauth) {
            syslog(L_NOTICE, "%s user %s", Client.host, PERMuser);
            [The same piece of code with NNTP_OK_AUTHINFO.]



It looks as though the first condition never matches because there is no PERMpass...

I tried to see when it was used and I found out in old commands.c:

#ifdef DO_PYTHON
     if (innconf->nnrppythonauth) {
        [...]
        PERMspecified = NGgetlist(&PERMreadlist, accesslist);
        PERMpostlist = PERMreadlist;
        Reply("%d Ok\r\n", NNTP_AUTH_OK_VAL);
        /* save these values in case you need them later */
        strcpy(PERMuser, User);
        strcpy(PERMpass, Password);
        [...]



Did something go wrong?
According to current code, PERMpass can be removed everywhere.
Its value set in AUTHINFO GENERIC is not used...

Or maybe I am totally wrong and do not understand PERMpass?

(PERMused, on the contrary, seems to be widely used.)



>> Anyway, they should not use that direct authentication.  It is specified
>> nowhere with AUTHINFO PASS.  Note that innfeed does the job right:  it
>> sends AUTHINFO USER and AUTHINFO PASS.
>
> If you send just AUTHINFO PASS to INN right now, what does it do?  And
> does it normally just ignore the user?

innd takes it.  Note that incoming.conf only defines password: for authentication.

%telnet localhost 119
200 news.trigofacile.com InterNetNews server INN 2.5.0 (20080629 prerelease) ready
AUTHINFO PASS pass
281


It just ignores the user:

    /* Ignore "authinfo user" commands, since we only care about the
     * password. */
    if (strncasecmp(p, USER, strlen(USER)) == 0) {
        NCwritereply(cp, NNTP_AUTH_NEXT);
        return;
    }

where USER="user " -- with a space :)

-- 
Julien ÉLIE

« La femme a la passion du calcul : elle divise son âge par deux,
  double le prix de ses robes, triple les appointements de son mari
  et ajoute cinq ans à l'âge de sa meilleure amie. » (Marcel Achard) 



More information about the inn-workers mailing list