HI All
I make no apologies for the length of this email, but I would ask anyone 
concerned with abuse handling, RIPE Database data management and RIPE 
Database maintenance to read it. I am not trying to be a perfectionist 
or technical purist, but the changes being forced through now do matter.
cheers
denis
When "abuse-c:" was first proposed, Tobias (co-chair of Anti Abuse WG) 
and I spent a lot of time discussing how to achieve the intended goal. 
We came up with the current implementation, which after community 
discussion was approved. But you never think of everything in the first 
instance. I believe there is one piece missing that allows the whole 
system to be broken (see later). I also believe the changes being made 
(without proper discussion) by the RIPE NCC's 'improvements' to 
Webupdates will break the abuse-c system over time.
As a separate issue, but related to this, I think the RIPE NCC should 
give advance notice to the community of changes to interfaces like 
Webupdates and allow some discussion on significant changes like 
ORGANISATION object creation and authorisation and not just 'slip them 
in', then try to justify them when someone notices. These are major 
changes to the way the RIPE Database works. They are not just changing 
the look and feel of Webupdates as an interface tool.
So lets start with some history.
The goal of "abuse-c:"
When the data model was designed there was no thought given to abuse 
contacts. The internet was much smaller and more personal. The data 
model was built on the principle of human readability and not 
programatic parsing. So when the need for abuse reporting was first 
considered necessary it was good enough to add things like:
remarks: In case of abuse contact me(a)here.com
You could put this anywhere and someone would find it. Then it got a bit 
more formal and we introduced the "abuse-mailbox:" attribute. But this 
was allowed in five or six object types. None of these were the resource 
objects. So the information was scattered all over the database. This 
was still almost impossible to find programatically.
The goal of "abuse-c:" was:
-to have one way of documenting abuse contact details
-parsable programatically
-very simple for majority of resources
-flexible for any other resource situation
The "abuse-c:" design
Tobias and I considered many options to achieve these goals. What we 
focussed in on was that most small to medium LIRs may have many 
resources but only one person/role handling abuse complaints. All these 
resource objects in the database referenced their one ORGANISATION 
object. So by adding the "abuse-c:" attribute to the one ORGANISATION 
object, referencing a ROLE object containing the contact details, we 
handled a large number of simple cases in a very simple way. All the 
resources referencing this one ORGANISATION object and all the more 
specific resources would inherit this contact information from this one 
location. Easy to set up, easy to maintain.
But there are other situations. For example sub allocations. We also 
considered that accountability is an important element of this public 
registry database. There is a notion that when a resource is allocated 
or assigned by the RIPE NCC to an organisation, then that organisation 
is ultimately responsible for anything that happens regarding that 
resource. This is why ORGANISATION objects are mandatory for any 
organisation that wants to hold internet resources. So we considered 
that if part of the responsibility has been delegated to another 
organisation with a sub allocation, it is not unreasonable that another 
ORGANISATION object should be created to reflect this delegated 
responsibility. If this second organisation handles the abuse reporting 
for this sub allocation, then another "abuse-c:" attribute can be added 
to their ORGANISATION object to reflect this. If the LIR who is 
responsible for this allocation, including the sub allocation, wants to 
handle all abuse reports for the whole of their allocation then no 
"abuse-c:" should be added to the second ORGANISATION object. The sub 
allocation will then continue to inherit the abuse contact details of 
the LIR who holds the whole resource.
Inheritance vs Scattering
The data model for the RIPE Database was not designed with inheritance 
in mind. In many situations duplicated, redundant data is scattered all 
over the database. There are over 3 million INETNUM objects in the 
database. They all contain one or more "admin-c:" and "tech-c:" 
attributes. In reality all these references are to a few tens of 
thousands of individual roles. These contacts could be inherited from 
the ORGANISATION objects in the way "abuse-c:" has been set up. The 
"abuse-c:" was designed to be inherited and not to be duplicated where 
it is not needed.
The changes made recently to Webupdates by the RIPE NCC (without any 
discussion) breaks the inheritance of "abuse-c:". It forces the 
scattering of more redundant data throughout the database.
If you create an ORGANISATION object with Webupdates it forces the 
addition of an "abuse-c:" attribute whether it is needed or not. They 
argue that you can refer to an existing ROLE object making it the same 
abuse contact. Even if this was set up correctly it is redundant data. 
In reality people setting this up quickly will just take the easy option 
of giving any email address (mickey(a)mouse.com) They may not realise the 
impact of this. But this simple mistake overrides the LIRs genuine abuse 
contact details from any point in a network where this new ORGANISATION 
object is referenced.
Understanding your network and the RIPE Database
What it comes down to is that you should understand how your network is 
structured. You should at least know who needs to be contacted, for what 
reason, from which point in your network.
Unfortunately with the current data model you also need to have at least 
a basic understanding of how the data is structured within the RIPE 
Database. And to be honest if you don't understand the basic structure 
of the RIPE Database you should not be managing data in it, maintaining 
it or documenting it.
With knowledge of your network and the database you can decide where you 
need to put "abuse-c:" attributes. DO NOT add extra, redundant 
"abuse-c:" attributes.
What can possibly go wrong?
In defence of their unannounced changes to Webupdates, the RIPE NCC has 
argued that adding additional "abuse-c:" attributes is harmless and will 
NOT lead to bad data in the database. Forcing users to add additional, 
redundant data that breaks the principle of inheritance is in itself 
technically wrong.
But without being a technical purist what else can go wrong? Once these 
additional references have been added, the seeds have been sown for 
future mistakes. It all depends now on who maintains what and who is 
notified of what changes. The referenced ROLE object can be changed or 
the "abuse-mailbox:" value in the ROLE object can be changed. This could 
be accidental or with good intent, but just got it wrong or even 
maliciously. Without the proper checks this can easily go unnoticed. 
Over time some/many of these redundant references may/will get out of 
sync with what they should refer to. In a few years time someone will 
argue that all this contact data is messed up, abuse-c did not work and 
we will invent a new system...
The missing bit
The "abuse-c:" attribute does work and will work well if used properly. 
But there is one bit missing from the original design....proper 
notifications.
We need another attribute adding to the ORGANISATION object
abuse-notif:    [required]   [multiple]     []
This will allow the resource holder to keep an audit trail of any 
changes made to the abuse contact details for any parts of their 
resources. The 'required' (as defined in the database documentation) 
means it is syntactically optional, but business rules enforce it's 
presence in some situations. This should be added to any ORGANISATION 
object referenced by a resource object. Any addition, change or deletion 
of any part of the abuse contact details ("abuse-c: attribute, 
referenced ROLE object, "abuse-mailbox:" attribute) at any part of a 
network will be notified to the resource holder's email address 
specified in this attribute. Only the "abuse-notif:" referenced via the 
top level of a resource object will be notified. Any redundant 
references in more specific objects will be ignored (and should be 
removed, warned or disallowed).
This means the resource holder will always be notified if anything is 
changed at any point in the resources/networks they are responsible for.
I also think it would be useful if RIPEstat could give a visual 
representation of where abuse contacts are located within a network. 
This would allow a resource holder to review who is managing abuse for 
any part of their networks.