Hi,

> Well, as everyone could have guessed, they talk aboout "fields".
>
>        A summary of the RADIUS data format is shown below.  The fields
>        are transmitted from left to right.
>
>
> They then switch to calling them "attributes", for no good reason.

Nope. They call one particular field the "attributes field", because that's
the field in the whole packet transmitted over the net which contains the
attributes needed for authentication.

> The second use of the word is:
>
>     Once the client has obtained such information, it may choose to
>     authenticate using RADIUS.  To do so, the client creates an "Access-
>     Request" containing such Attributes as the user's name, the user's
>     password, ...
>
> So again, use without definition. This is very poorly written.

Nobody ever claimed RFC's are well written. However they still define the
terminology in the area where they apply...

>    Attributes
>
>          The Attribute field is variable in length, and contains a list
>          of zero or more Attributes.

Exactly what I have been saying above: The "attribute field" of the whole packet
contains individuel attributes.

> What they MEAN is that there is a contiguous (trailing) area of a packet
> called the AttributeS (note the S) "field".

Sorry, I'm no native speaker, so I can't appreciate that linguistic difference.
To me, it's exactly identical when translated to my native language.

> And unsurprisingly it
> contains a contiguous sequence of areas each of which they describe as
> "an Attribute".  The number of those is not fixed from packet to packet,
> and I presume there are as many in each packet as will fit in the length
> stated via the contents of a certain fixed earlier field of the packet.

Exactly.

> Doesn't it make a difference when somebody writes properly?

I don't know. It's all still english to me.

> A  1 one-byte type field. So there are only certain fixed field-names?

Exactly. The attribute names from the dictionary.

> Up to 256 of them. Only 63 are defined.

Careful, there's a mechanism for extending that domain, there are in fact
63 standard attributes and several hundred vendor attributes defined by an
extension mechanism we don't need to go into. The point is, the attribute
names are not restricted to 63, not even to 256.

> There's a 1-byte length
> follwing the type, so the field can be a string of up to 256 chars
> (well, 253, I suppose). Well, it appears the values in the "Attributes"
> can come from a union type of strings (yes, 253), ip addresses, 32 bit
> ints, and time.

essentially, yes.

> So indeed, I was right, you do have "field names". They are precisely
> the ones I thought they were:
>
>           1      User-Name
>           2      User-Password
>           3      CHAP-Password
>           4      NAS-IP-Address
>           5      NAS-Port
>           ...

Exactly. Only, they are called attribute types.
>
> So I guess you can have variables that simply have any name except
> those, if you have variables. Do you?

No. Imagine the left hand side as always being one of those 63 reserved names.


> Gawd ... then there is an extremely boring listing of the packet layout
> of each of the kinds of field!

The point is, it also defines the values, that are permitted for that attribute,
take for examples section 5.6 which describes the "Service-Type". There it says:

 Value

    The Value field is four octets.

     1      Login
     2      Framed
     3      Callback Login
     4      Callback Framed
     5      Outbound
     6      Administrative
     7      NAS Prompt
     8      Authenticate Only
     9      Callback NAS Prompt
    10      Call Check
    11      Callback Administrative

And it's giving a precise description, what the semantic of each value is 
supposed
to be.

> Let me skip.
>
> Uhhh .. I think it stps around page 58.
>
>
> Now I still don't know anything about your use of the words value

Because you skipped precisely that ...


> and variable and so on,

? I've been talking about attributes (attribute names, "field" names) and 
values,
exclusively, haven't I?

> or what you have in your little language, but I can
> tell you taht what I saw in the RFC was entirely standard and had
> NOTHING WHATSOEVER TO DO with your language, except for he ome point:
> that you seem to have preserved the field names ("attribute type" names)
> used in the RFC in your language.

And the value names. I admit that the syntax "attribute type = value name" to
describe that an attribute of the given type with the given value should either
be checked for existance in the query or should be added to the response" is
neither coming from the RFC nor very intuitive, the only thing I can say in it's
defence is that every RADIUS server is doing it this way. I didn't look at what
FreeRADIUS documentation says in that respect (as when I had first contact with
FreeRADIUS, all this was already well-known to me), but I believe you when you
say there's room for improvement there.

> Now I still don't know what your terminology is or where it cmes from,
> and I am not going to read the other 31 rfcs to find out. You can
> describe your configuration language.
>
> Why should *I* do this work for you?

Why should *I* do this work for you? I'm just as much of a RADIUS user as you
are, and you are the first one to actually criticize the documentation in that
respect, AFAIK. It's good practice in open source projects to actually
contribute improvements if you find something which needs improvement and which
you can improve. It's unlikely that somebody else is able to read your mind and
fix it in the way you like ...

> Do you want me to look for uses of the word "value" in the rfc?

As I said, it's defining the exact values for each standard attribute in the
section you skipped. Having a look at one or two samples should be widely
sufficient to get the idea.

> >
> > > Will you PLEASE step outside of the tiny universe you have built for
> > > youself, in which some things are upside down, and instead COMMUNICATE?
> >
> > That's what he is trying to do. However, you refuse to have a look at the
> > about fifty pages which exactly define the conventions to be used when 
> > talking
> > about RADIUS (namely the RFC). Yes, personally I also found the terminology
>
> If you mean the same rfc I just read, it was about 80 pages, and had
> nothing in particular to do with whatever you have in yoru config
> language.

Well, it's defining the strings permitted both on the left and on the right 
hand side
of the "=" symbol. If you think this "has nothing to do with the config 
language",
then I must admit to be lost and not understand at all what you're talking 
about.

> If you mean another one, you can jump -

No, that's the right one (well, essentially. rfc2865 is it's current version...)

> Using the same terminiology as everyone else is the simple goal. The
> rfc I read had it right. Now you get to get it right too!

Then, I'm lost as to what your point really is.

> > Sorry, in that case, it's YOU who is trying to use a private language 
> > unrelated
> > to RADIUS. The rest of the universe, when talking about RADIUS is using the 
> > words
> > defined in the RADIUS RFC. You're making up your own ones based on your 
> > "superior
>
>
> Which is? I've just read it
>
>    Remote Authentication Dial In User Service (RADIUS)
(snipp)
> and it contains nothing at all about your strange usages.

It contains all about permissible attributes and their permissible values 
(well, almost;
it only generally describes the mechanism for vendor-specific attributes and 
their values,
which needs to be looked up in vendor specific locations, but they really are 
nothing
which is lexically much different, especially when not looking at the packet 
level).

> > intuition". Sorry, but I feel like you're trying to use PASCAL syntax and 
> > complaining
> > about a C compiler rejecting stuff as invalid.
>
> Then you would be wrong. I know many more languages, indeed _classes_
> of languages, than you, and I probably wrote more than you know anyway.

Of course. My field of work is chipcards, cryptography and maths, i.e. nothing 
where
you usually need to define a new language.

> > RADIUS (i.e. the RFC) defines dozens, probably even hundreds of values 
> > which do
>
> No it doesn't. I just read it and it defines 63. They are INDEED field
> names. So where are you coming from?

It defines 63 attribute types. And for all of them, it defines the permissible 
values,
which typically are either IP-Adresses, or strings or a couple of predefined 
values.
If you look at all the attributes taking predefined values (in those pages 
which you
skipped) and count the values, you will find that there are quite a lot of them.

>
> > look like this. PPP, Framed-User, Session-Timeout, etc., all those are so 
> > called
>
> PPP is not defined.

It is. See section 5.7 where the permissible values for the attribute
"Framed-Protocol" are listed.

> It is an ordinary string. There is nothing special
> about it. I presume your misapprehension comes from this section of the
> rfc:
>
>   The NAS MAY include the Attributes Service-Type = Framed-User and
>   Framed-Protocol = PPP as a hint to the RADIUS server that PPP service
>   is expected.
>
> But you can see from that that they are ordinary strings. They have no
> reserved meaning.

100% wrong.

> They are not "field names".

Exactly, they are _not_ attributes, they are _values_.

> Can you please get it through your heads that there is nothing much to do
> with radius in your config language?

Can you please get it through your head that your prejudices are partially
wrong?

> It is a syntax, nothing more.
> Languages are just that! They have an intended semantics and that hels
> us to understand them, but in themselves they are just collections of
> syntax.
>
> As such, when you write
>
>     A == B
>
> You must be able to tell me what the syntactic class of A an B is
> restricted to be. I think it is:
>
>
>   Field-Name '==' Expression

Entirely wrong. It is:

  Attribute (as listed in the RFC) '==' Value

And
Value ::= Literal-Constant (as listed in the RFC)
       | <Ip-Adress>
       | String (with length limit).

[ FreeRADIUS also does some magic with variables, but that's not typical for
 RADIUS servers (and I know strictly nothing about it), so please let's ignore
 this.]

> But you won't say and haven't said.

Then that's a point where I agree the documentation could be improved by
somebody.

> When you make it clear what
> the syntactic rules are, then I can begin to attach a semantics to your
> constructs.
>
> Now it seems that I was right and "PPP" is a constant. However, the
> person who wrote in and suggested
>
> xyz  Foo == FOO
>      Bar = FOO
>
> as a way of  filling field Bar with the value of field Foo was
> apparently mistaken.

That was supposing _you_ would substitue some value for FOO, such that if the
attribute Foo has the value represented by FOO, the attribute Bar is filled with
the value represented by FOO, as well. Having a variable content in any field
besides Username, Password and any attributes identifying the client talking to
the server is rather unusual for RADIUS and passing that value on to another
attribute is something which many RADIUS implementations will just refuse.

> He has been mislead by your mistaken texts, which
 (BTW, not _my_ texts, so far I didn't contribute a single line to FreeRADIUS or
  its documentation)
> do NOT make these things clear in the way they ought to.

Now, he was mislead by your unusual requirement to pass a value from one 
attribute
into another one. As I said, not something RADIUS normally supports. The typical
way to do it really is
  xyz Foo == value1
      Bar = value2
  xyz Foo == value2
      Bar = value2
and be done with it. Of course, that's something totally inappropriate for your
original sample with an ever changing string as value.

> And the rfc ays nothing about your config language. Not the one I have
> read, anyway.

Yes, that's what I also realized when looking at it again to answer your 
questions.
All I can say is that it's a config language shared by all RADIUS servers I've 
ever
seen (except for FreeRADIUS specific extensions, which I don't know well-enough 
yet
to say anything about them) and I don't remember ever having seen a concise 
definition
of it. Somehow, everybody appears to assume that it's self-explaining.


> > values. And e.g. User-Name, Framed-IP-Adress, NAS-Port are so called 
> > attributes.
>
> No, they are NOT. Those are the NAMES of so-called "attribute TYPES".

Yes, that's the more exact wording. However, everybody is using "attribute" as
name for the 'name of one of those so-called "attribute types"' because the 
latter
is a bit longish.

> These are predefined and fixed numbers that appear in the packets. You
> can call them anything you like in your little language, and use any
> syntax you like.

Sure. But not inventing a new syntax simplifies things a lot ...

> But thankfully you have used the same names in your
> language as appear in the rfc for the packet contents, but DO NOT
> CONFUSE THE TWO. Youhave complete freedm in designing your language. It
> only behoves you to explain it.
>
> For example, there is nothing stopping you allowing
>
>      Request: x <= User-Password, User-Name == "Fred"
>      Reply:   x => CHAP-Password
>
> as a syntax. Or, more like what you had:
>
>     Fred   User-Password == x
>            CHAP-Password := x

Only that it won't work because CHAP-Password (if you look up it's description
in section 5.something of the RFC) is not a permissible reply attribute. ;-)
You really do have to have the RFC at hand to be able to make up a reasonable
configuration or even a reasonable example.
But let's ignore that for now.

> And this is a perfectly comprehensible and likely syntax and semantics.
> We need to be TOLD that you in fact interpret it as:
>
>      Request: User-Password == "x", User-Name == "Fred"
>      Reply:   "x" => CHAP-Password
>
> Because we CANNOT TELL by looking at your text and examples.

Err, wait. You mean to suggest, the above should set the CHAP-Password (or
something more reasonable) to the value you passed in as User-Password?
No, that's not the way it works, it's _much_ more stupid. there are no
variables. If the User-Password is "x" (literally), then it would set
CHAP-Password to "x" (literally). If you pass anything else for User-Password,
then the rule gives you a reject and does not set CHAP-Password to anything.

> > And the only way to find out which one is which one is to either know 
> > everything
> > relevant for you by heart, or to look it up in the so called dictionaries.
>
> No, thank you , but I am QUITE capable of figuring out whatever it is
> you mean, as soon as you take the trouble to SAY.
>
> If you don't say, I and everyone else have to GUESS.
>
> When we guess, and we put our guesses to you, we do not expect to be
> told "go read the rfc", but "oh - yes, I see, we didn't explain how to
> use that - we'll fix".

(Again, wrong adress. I'm in the same boat you're in with the difference of 
having
been exposed to RADIUS (_not_ FreeRADIUS though) for a couple of years already.

> I have no idea what you are talking about. You have a view of something
> taht i have not read, and I have just read 80 pages simply to be able
> to reply to your mail.

Perhaps it's a small consolation that I also had to look at it again to answer
you're mail, but since I did write my first mail, I felt somewhat obliged to
clarify a couple of points, even if it means more reading/writing than I 
initially
wanted to invest. ;-)

> > key point to the people who invented the RADIUS protocol and wrote the RFC.
>
> There is NOTHING to do with radius in the technicalities of your
> language!  Please get it through your head!  We are talking about
> whetehr you write your variabes on the left or on the right,

THERE ARE NO VARIABLES!!!!

> or whether you use capitals to designate named cojnstants, etc.

Constant names (just as attribute names (aka names of attribute types)) come
from the RFC...

> Those are purely lexical and syntactical considerations, with a
> smidgeon of programming language semantics thrown in. Nothing to do
> with radius.

You're trying to find a much more complex language in there than there
actually is, complaining that things are looking the same when you wrongly
believe they are widely different and complaining that there is no visible
difference.... :-(


> > > Field name is a perfectly good name for it!
> >
> > Except that no one uses it when talking about RADIUS. There are 
> > "attributes" and
> > "values", nothing else.
>
> Forget radius! Your language has nothing to do with it at that level!
>
> And the radius rfc that I just read uses words fairly normally! It has
> been your use of them in connection with programming language that has
> been odd so far!

There's no programming language involved. Only sets of attributes which need
description (and Attribute-Type=Attribute-Value seems perfectly reasonable
to me).

> I don't know why or how you have convinced yourself
> that your usage is normal, but it is not, for all the sense I can make
> of it.

That's because you're trying to make much more of it than there is...

> I am not! I am using the same language as the rest of the computing
> world is using, and the rest of the world is using computers ... if you
> have got something upside down somewhere, and I don't know, theny
> please fix it! The radius rfc I read is perfectly OK (apart from the
> usual faults of a rfc) and the strange language appears to originate
> with YOU.

Actually, not with ME, but with the author of FreeRADIUS documentation. In fact,
probably not even there but with the author of the documentation for the very 
first
RADIUS implementation (i.e. the authors of the RFC), as the configuration 
language
is pretty much standard.

> Do you want me to list the use of the word "value" in the rfc for you?
> I can assure you that no special meaning is assigned to it! It is used
> in the ordinary standard way, as an element of a semantic domain. The
> values of "Attributes" in a packet come from a well-defined domain.

And those are the values that are used in the configuration file.


> Now, when you come to your LANGUAGE, you will have TERMS and an
> INTERPRETATION of those terms. Your language defines
> declarative programs which are INTERPRETED as instructions on how to
> respond to certain types of incoming packets in a radius protcol.
> That's all - there's no mystery.

Exactly. If the incoming packet contains specific attributes having specific
values, do reply with another set of attributes having specific values.
E.g. if "user 'stefan' is logging in with password 'test', accept the query and
add 'Framed-Protocol=PPP' to the answer", would be written as
  stefan   User-Password=="test"
           Framed-Protocol=PPP
What's so unclear?

> Of interest in your language is merely the linguistic mechanisms it uses
> to define the interpretation. It doesn't particularly matter that the
> intended interpretation is as a responder to radius calls. Above that
> there are variables, constants, scopes, all that kind of thing. I.e.
> generic computational lingusitics. It is THERE that your usage does not
> seem to be in accord with the rest of the world - radius does not come
> into it.

You're looking for something which simply does not exist!

> > i.e. the RFC? It's going through dozens of pages and samples to define the 
> > meaning
> > of "attribute" and "value".
>
> No, it doesn't.

It does. The pages you conveniently skipped.
It's all about defining standard attributes and their possible values...

> So please do not confuse the issue. That you have certain special
> names for special constant values (in special contexts?) is an
> unimportant feature of your language - merely a convenience to adapt it
> for the chosen domain. I would guess that your interpreter would be
> happy if you wrote "1" instead of "Login".

No it isn't. You have to use the constant names from the RFC - in _all_ RADIUS
implementations I ever encountered. That's just to avoid configuration files
looking like
  test   6==1 5==2
         8=7
(I.e. if user test queries access with attribute type 6 having value 1 and 
attribute
 type 5 having value 2 accept and reply with attribute type 8 being set to 
value 7.
 Looking up the attribute types and values will probably show that it's 
complete nonsense
 even wqith that interpretation, but you probably see why nobody would want 
similar
 configuration files)

> And note that the names they use are not precisely the ones you used.

Probably spelling errors in the dictionary I (ab)used to write my initial mail.

> That leads me to suppose that you don't have context sensitivity in the
> interpretaton of constants in yoru language. You've suffixed "-User"
> to the names in order to define a context as part of the name,
> converting them into globals instead.

No. No special meaning, just errors on my part.

> 1) Your language contains certain reserved symbols with special
>    interpretations in certain contexts
> 2) In the appropriate context and on the RHS of an == or = or ..  sign,
>    the symbol "Login-User" stands for a CONSTANT of a certaib fixed
>    VALUE.
> 3) The appropriate context is at least when the token (reserved word -
>    a field name) Service-Type appears on the left of that == or = or ..
>    sign,
>
> I don't know if there are any more contexts in which it may appear.

Probably not. RADIUS is pretty good at having totally different names for
all the possible values of different attributes.

> I don't know if it retains its special interpretation within a compound
> expression.

There is no such thing as a compound expression (at least not generally, I
don't know about possible FreeRADIUS specific extensions).

> Those are things I require you to tell me, in order to
> describe your language adequately.
>
> Note that I have
>
> A) defined the syntactic conditions for the appearance of the symbol to
>    be valid
> B) defined the semantic interpretation of that symbol, when it appears
>    validly.
>
> That's all.

I start to get your point...

>
>
> > > I suspect that your computational domain is "strings".
> >
> > No, it's rather "elements defined in the dictionary".
>
> Well, it was strings up to 253 chars plus 32 bit ints plus a couple of
> minor things that I forget.

Well, typically you can't use the ints but need to use the name for a constant.
And I totally forgot about the strings as there are not many (frequently used)
attributes actually taking string values. Most of the time, it really is the
name of a constant, i.e. one of the elements defined in the dictionary.
I admit that I tend to overly simplify the whole thing...

> > > I suspect that
> > > the TERMS on the right hand side of your = signs may be either literal
> > > constants with VALUE a string, or VARIABLES with VALUE a string. Or
> > > compund terms.
> > >
> > > There's no need for mystery! It just takes a simple yes or no from you.
> >
> > Sorry, I'm lost in your wording and can't answer the question. :-(
>
> Why? The wording was normal. I asked you what the things on the right
> of = signs could be:
>
>   1) literal constants (whose value would be a string ..) or
>   2) variables (whose value would be a string ..) or
>   3) compounds of 1) and 2) in some more complicated term.
>
> Where is the difficulty?  This is a normal way to define something
> constructively.

Ah, OK, got it. Probably my parser for english was choking a bit, yesterday
(also, I hadn't yet understood, what kind of mysteries you tried to put into
that configuration "language". ;-)
So the answer is that the right hand side consists of literal constants.

> > > It is true, according to what the docs eem to say and other participants
> > > in this thread.  Are you suggesting that PPP is instead a constant (as I
> > > believed)?
> >
> > Yes. It's a value. If it helps to clarify things, on the byte level, "PPP" 
> > is
> > represented by a 32-bit-integer with value 0x00000001 (in network byte 
> > order).
>
> Well, the rfc does not say precisely what I think you think it says.  It
> says:
>
>        integer   32 bit value, most significant octet first.
>
> And you will note that the order of bits within an octet is not
> defined! So you would only be justifed in writing
>
>           0x0:0x0:0x0:0x1
>
> but we won't find a problem easily there!

OK, a clear definition of octet is missing... ;-)

> > > Not that I am interested, but here is what your docs say:
> > >
> > >
> > >  DEFAULT Service-Type == Framed-User, Framed-Protocol == PPP
> > >         Service-Type = Framed-User,
> > >         Framed-Protocol = PPP,
> > >         Fall-Through = Yes
> > >
> > >  If the request packet contains the attributes Service-Type and
> > >  Framed-Protocol, with the given values, then include those attributes
> > >  in the reply.
> > >
> > > See that Framed-Protocol is a FIELD!
> >
> > Well, if you want to call attributes "fields", feel free to do so, but don't
> > be surprised if nobody understands you.
>
> It's a field in every sense that I understand it, and that everyone else
> understands it. There is an incoming record (a packet) and it has
> fields. The name of one of those fields is "Framed-Protocol". If yu
> want to call it an attribute instead, I don't mind at all. That is also
> a conventional use of the word, and the two mean the same. One is used
> in the database context and the other in the OO context... the overlap
> is substantial and in this case the sematics falls within the usual
> scope of both.

Aha, we do reach some understanding ... :-)

> > > The right hand side (PPP) of the == must then either be
> > > another attribute (field name) or a constant or a newly introduced
> > > variable.  It cannot be another field name, surely?
> >
> > Right. Attributes have _values_, not other attributes.
>
> Nobody suggested they have anything else than values. What else could
> they have?
>
> > Feel free to call
> > them constants, if that simplifies your life,
>
> No, they are not constants. Attributes, I mean.

Agreed. I meant, feel free to say "constants" or "constant names" instead of 
values.

> They have values which
> are values. There is nothing funny about that. Apparently PPP however
> is a predefined NAMED CONSTANT, which I did not know. I thought it was
> a constant, but the LITERAL constant "PPP", since there was no
> indication to the contrary and PPP is a common word.  I didn't know its
> value was not the string "PPP", but the number 27 (or whatever it is).

And there really is no need to know it. If the documentation of my radius client
tells me, it's expection the attribute "Framed-Protocol" to have value "PPP" to
establish a PPP connection to a user, I just add "Framed-Protocol=PPP" to the
configuration and I'm done. No need to know if PPP is a named constant (with 
value
1 or 27 or whatever) or a literal a string.

> > Anyway, variables don't really exist in RADIUS. If you find them, it's
> > a proprietary extension of a specific RADIUS server. FreeRADIUS is using
> > something like '%{something}' for variables.
>
> There is no indication that they don't exist.  Languages normally
> contain variables, or they are not useful.

It depends on your context. Of course a programming language without variables
would be a nightmare. A RADIUS server not supporting variables in its 
configuration
file however is still fully functional.

> Everyone who has read the
> docs and who has written to me privately (not a great number,
> admittedly, but some) has said that they believed they do exist, and
> cited the examples given in the docs as evidence.

Again, that's a FreeRADIUS extension, which I know nothing about. I'm only 
trying
to get the simple things straight that I understand.

> No, I haven't seen it. But I am willing to believe there is ANOTHER rfc
> that defines something like "a configuration language for radius".

AFAIK, there isn't. Somebody coming up with a good general description really
would fill a gap in current documentation. Every server I've seen essentially
relies on people looking at examples and using/modifying/extending them step
by step... :-(

Once you do have the basic understanding that "everybody" appears to take for
granted, I _suppose_ (no sorry, I won't start reading them now) the server
specific documentation for the specifics of the server does make perfect sense.

> > in the dictionary files), and there is no way to tell anything without 
> > actually
> > looking it up. However, if you look at stuff like "A = B", A is _always_ 
> > going
> > to be an attribute (field, if you insist) and B is _always_ going to be a 
> > value
> > (constant, if you want to call it like that). However, simply looking at an 
> > "A",
>
> OK, in your language, I might be willing to believe that the rhs is
> restricted to be always a constant term, but it isn't, because you
> allow  at least also
>
>      A = `%{0}`
>
> as I personally verified. So come clean! What IS allowed on the rhs?

Sorry, I've been talking about RADIUS configuration in general, _not_ about
the specifics of FreeRADIUS which you already know better than I do.

> Named constants?  Literal constants? I bet the latter too.

In the case of attributes taking string values or IP adresses or arbitrary 
integers,
yes. Not if only few values (for which named constants are provided) are 
allowed.

> Variables?
> You say you don't have any, but the above looks like some kind of
> variable to me - fix your syntax a bit and it would be fine. Compound
> expressions? You already allow the ` ` operator. What else?

Again: FreeRADIUS specific extensions.

> > there is _no_way_whatsoever_ to decide whether it's an attribute or a value,
> > except for looking it up.
>
> You are saying that the lhs may be either a field name or a named
> constant (or a literal constant)?

Nooooo! I'm saying that you can't decide if a given identifier is an attribute 
(field
name) or a value (constant name) by counting dashes or looking at upper and 
lower
case letters or something. The only way to decide is to look it up.

> Mind telling me where the lexer and parser are?

No idea for FreeRADIUS. For my own primitive RADIUS server, it's a simple 
routine
which first decides, if it's on the left hand side or on the right hand side.
If on the left hand side, it looks up if the character sequence it finds there 
is
defined as an attribute (field name) in the dictionary file(s), if it isn't, 
it's
an error. For the right hand side, it checks the "type" (domain) of the 
attribute.
If it's an attribute taking a string as value, it checks the right hand side 
looks
like "some value" (with the quotes) and takes the stuff between the quotes as 
the
value of the attribute. If it's an IP-Adress, it takes an IP-adress, if it's an
integer it accepts either an integer (AFAIK, FreeRADIUS is more strict in this
request) or a named constant. For the named constant it looks into the 
dictionary,
if it finds a definition of that constant, fine, if not, there is an error. It's
about 150 lines of pure C code (not counting the functions handling the 
dictionary
files), but I'd rather not try to write something suitable for FLEX from it.
All those named constants and attribute names would drive me crazy.

> > It is using the language defined by the RFC.
>
> I don't see it! And no it isn't, as far as I can see. But maybe you are
> looking at a different rfc.

No, we are looking at the same one. It's defining all the named constants and
the attribute names (expect for vendor specific extensions) and there really
isn't much else to the configuration language, if you leave FreeRADIUS specific
extensions apart.

> > "You are supplying the implementation of a C compiler, therefore we need to
> > know how to deal with the compiler, not how to deal with C".
> > Sorry, this is plain ridiculuous.
>
> No it isn't. That is precisely why gcc documents the things you
> need to  particularly know in order to deal with gcc.
(snipp)
> We need to know that, and the gcc info pages tell us so.

Point conceeded.

> Now - people who use C are interested in writing in C. Their livlihood
> probably depends on it.
>
> OTOH, people who use freeradius probably have no interest at all in
> configuriing and playing with it. They want it because they have to
> install some kind of authentication mechanism for users on a net. They
> have the same level of interest in it as in a password file.
>
> If you tell them they have to read (32!) rfcs to understand how they
> can set up a config file thatthey can then go away and forget about, it
> isn't going to happen. ow - you HAVE a very nice config file. I liked
> it! I understood it. I got it to work. I figured out the unclear bits.

Lucky you. Believe me, most people just pay some expert to come and set it
up for them, and depending on the complexity of what they want, if those
experts may need a couple of hours or even days to do it. Sorry, it just
isn't very easy or obvious for non-trivial cases.

> But I expect you to see whatthe problem is when I explain it to you.

That's OK with me (especially since I'm in no position to fix those
problems anyway... ;-) ), but I had the impression you were making up
a couple of non-existing problems by expection way to much of a very
simple-minded language.

> Do you have variales or don't you? What lexical chape are the? What are
> the syntactic classes that can appear on the right of an ==.

I've given you the simple-minded answers I've come across so far. Granted,
FreeRADIUS is superior to what I've known so far, so there's more room
for unclearness and misunderstandings.

> No it won't. It will seem right, because (a) I don't know what you
> mean, not having seen anything in the RFC I have read that is backwards
> (OK, OK, so that's not a "because"), (b) correct is correct, and if the
> rfc gets things backwards, that is no reason for you to talk funny,

It would be, because the description of server and clients really should match.
If one describes it forward and the other one would get things backwards, that
would really make things fun.

> (c)
> the customers for your config language couldn't care less if the rfc
> talks funny - they want straight talk,

No, they want talk compatible with the talk they got from the vendor of their
radius client.

> (d) I don't believe the rfc gets
> it wrong either (all the evidence I have seen so far is that if anyone
> is getting some things backwards it is YOU lot, and nobody else, not the
> rfc, which looks bona fide to me).

Mee to. But FreeRADIUS documenttion doesn't seem to be getting things backwards
either, IMHO. It's just your over-complicated attempt at interpretation which
makes everything seem backwards, as far as I can tell.

> > >   A-B-C = FOO
> > >
> > > FOO is neither a variable nor a constant,
> >
> > It _is_ a constant.
>
> OK. But it's taken you a long time to say so (now, don't froth over!).
> And it's a NAMED CONSTANT. The word is reserved. Its value is
> not apparent.  It is not a LITERAL CONSTANT (i.e.  one which stands for
> the value it says it is, as in PPP has value "PPP").

And since the value is "opaque" and since I'm not going to write that
FOO is a NAMED CONSTANT meaning the value which it means, what's wrong about
calling it FOO the "value" of attribute A-B-C? Nobody ever should need to
get closer to the "real value"  than that name defined by the RFC. It actually
does help (in my experience), if users do not start thinking that it really is
only a name and they might as well fill in the "real value".

> Just say that  the things on the rhs of an = are limited to certain
> terms. Among them are named constants and literal constants

Yes.

> and certain "perl expressions".

Again: FreeRADIUS extension.

> The named constants have value in the
> domain of "radius values".  I.e.  strings less than 253 or so chars, 32
> bit ints and so on.

I think, the named constants really always have values that are 32 bit integers,
but I don't care, every server, every client, even every reasonable network 
sniffer
is presenting me the "name" as the "value" of the attribute. I'd even go so far
and say that the "named constant" is the value and the "value" is only the 
internal
name used to designate the value in a space conserving way.

> There is no need to make up words. And theer is no need to perpetuate a
> usage ouside of the context in which it is appropriate. Your language
> has named constants and literal constants like every otehr language.
> Their values are radius values. You don't have to start calling
> constants "values"!

> > Variables don't exist in the RADIUS language.
>
> Well, they exist in yours (the perl stuff).

Yes, FreeRADIUS ext... (OK, I'm going to stop that comment.)

> But thanks for that very clear statement.
>
> (that makes the language very limiteD).

Which it just is, yes.


> PPP is a reserved word. Its computational semantics (i.e. its
> semantics in the domain of all possible interpretations of the language)
> is that of a NAMED CONSTANT.  In all interpretations of the language it
> has an interpreted value that does not change during excution, or from
> interpretation to interpretation.  It's like "pi".
>
> Its semantics in any particular implementation (and hence all
> implementations) is the value 27, for all I know.

Well, it's value is "PPP", i.e. the protocol to be used, the "name" 27 (or
whatever) as an alternative for the name "PPP" is only choosen because that's
easier to fit into a network packet and interpret by the often very limited
radius clients.

>  I don't care.
>
> It was not clear to me that it was a NAMED CONSTANT and not a LITERAL
> CONSTANT (i.e. the string "PPP").

What difference? The important thing is that it tells the access server which
protocol to use by a convention common to both radius client and radius server.

> I understand what you mean, but as we can both appreciate, the
> paragraph that I quoted is completely messed up. The author's intention
> is doubtless good, but what he has written is completely unclear and
> even tends to say the opposite of what he probably intended to say.

Because you're apparently paying much more attention to syntax than the
average reader, I'd claim. I don't think anybody else would have parsed
Alan's statement the way you apparently did...

        Regards,
                Stefan



-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to