haxworx

name2key


Update: a new script function llRequestUserKey was added to Second Life, obsoleting name2key services. This service is now deprecated.

How to use this service

You can look up a key using this field. Enter a name. Use the browser's back button to navigate back:

The service can be queried using a http request of the following form:

http://name2key.haxworx.net/?name=Name+Surname

The separator may be either a + or a %20. The reply will be 36 bytes, consisting of the key, or NULL_KEY if not found.

This service also supports "username" notation with a dot as separator, or omitting "Resident". Some other services don't support this, so if you want to be compatible with other services you shouldn't rely on this.

The request and reply format are the same as used by most other name2key services, including W-Hat's. The following example script can be used:

string NAME  = "Governor Linden";           // name to look up
string URL   = "http://name2key.haxworx.net/"; // name2key url
key    reqid;                               // http request id

default {
    state_entry() {
        reqid = llHTTPRequest( URL + "?terse=1&name=" +
                               llEscapeURL(NAME), [], "" );
    }

    http_response(key id, integer status, list meta, string body) {
        if ( id != reqid )
            return;
        if ( status == 499 )
            llOwnerSay("name2key request timed out");
        else if ( status != 200 )
            llOwnerSay("the internet exploded!!");
        else if ( (key)body == NULL_KEY )
            llOwnerSay("No key found for " + NAME);
        else
            llOwnerSay(NAME + "'s key is: " + body );
    }
}

Why a name2key service?

Second Life avatars have a name as well as a key. People normally identify avatars by their name, but scripts refer to them by their key. the term "key" suggests that it is secret, but it really isn't; the term refers to that which identifies a row in a database. There is no official mechanism to get the key for a name from within a script. The only way for a script to turn a name into a key is by using unofficial 3rd party name2key services. So far, linden Labs allows or tolerates them.

Second Life's website allows searching an avatar by name, and includes the key in the resulting page. As such it is a name2key service, but it is one that cannot be reached from scripts inworld.

I don't want my key listed!

There is no reason to worry about somebody else having your key. For a more complete discussion about it, and the reasoning behind the omission of an opt-out feature, please see this thread.

What about spam?

Someone who wanted keys to spam with notecards or IMs could get thousands of names in a day with a sensor object in a popular sim. It'd also have the advantage that they know the people they pick up are still actually playing, and they could target areas related to what they're trying to promote. They'd also be banned, because spamming is unacceptable. If someone is spamming you, file an abuse report; it doesn't matter how they got your key.

What legitimate uses are there for a database like this?

Some people use a key database to send product updates to their customers, and someone is using one to develop a way of sending IMs from outside of Second Life. These days, many people sell vendors and other gadgets that rely on this database to make it easier to, for instance, set up profit splitting or send gifts.

Submit raw keys

You can copy and paste keys into this field, one per line, to add them to the database. You don't have to worry about the formatting too much, it will try to find the key on each line and skip any lines that don't have one.


Add keys with a script

Here is a sensor script you can use to add keys to the database:

// set to TRUE if you want a message every time keys are submitted
integer ANNOUNCE_SEND   = FALSE;

// delay in seconds between scanning (keep it at least 30 or you
// may be banned from the site and LL will beat you up)
float   SCAN_INTERVAL   = 60;

integer keys_sent       = 0;
integer keys_new        = 0;
key     reqid           = NULL_KEY;
list    last_scan       = [];

default {
    state_entry() {
        llSensorRepeat( "", NULL_KEY, AGENT, 96, PI, SCAN_INTERVAL );
    }

    on_rez(integer param) { llResetScript(); }

    sensor(integer num) {
        list submit;
        list all;
        key  k;
        
        while ( num-- ) {
            all += (k = llDetectedKey(num));
            if ( llListFindList( last_scan, [k] ) == -1 )
                submit += k;
        }
        
        if ( submit == [] )
            return;
        
        last_scan = all;
        
        keys_sent += llGetListLength(submit);
            
        reqid = llHTTPRequest( "http://name2key.haxworx.net/",
                               [HTTP_METHOD, "POST"],
                               "keys=" + llDumpList2String(submit, "\n") );
    }
    
    http_response(key id, integer status, list meta, string body) {
        if ( id != reqid )
            return;

        integer x = llSubStringIndex( body, "new keys." );

        if ( x != -1 ) {
            string s = llGetSubString( body, x - 3, x + 8 );
            if ( s != "No new keys." ) {
                keys_new += (integer)s;
                if ( ANNOUNCE_SEND )
                    llOwnerSay( s + " | Total: " +
                                (string)keys_new +
                                "/" + (string)keys_sent );
            }
        }
    }
    
    touch_start(integer num) {
        if ( llDetectedKey(0) == llGetOwner() )
            llOwnerSay( "New/Sent: " + (string)keys_new + 
                        "/" + (string)keys_sent );
    }
}

About this service

This name2key service uses a database that was downloaded from W-Hat, and does a search using a bot for any query not found in the database, and then adds it to the database. Any new key found by this service in one way or another will be shared back with W-Hat for the benefit of everyone.

privacy policy and disclaimer

This name2key service keeps a log of queries, like most websites keep such a log. This log will not be shared with third parties.

This service is a best effort. Its availability cannot be guaranteed.

If Linden Labs decides that this name2key service has to be taken down, i will do so if asked.

This page contains information that is copied from W-Hat's name2key service.

Other name2key services

I only include web services that are currently operational.

status blog

2013-02-07: The service was down for the last 4 days. The cause is so far unknown. A measure has been taken to prevent this from happening again.

2013-02-16: It was reported to me that the service can return incorrect keys for some names, due to incorrect parsing of the Second Life search website. This has been fixed, and any incorrect entries have been removed from the database.

The cause of the problem is that if the correct username/account name is not found, SL will return avatars with a matching display name but different username. my parser simply looked for the first "/resident/key" url, and copied the key, so it got one for the wrong name. now it searches for a key url followed by the username/account name it's searching for (regardless of notation, display names, etc), so it will only use the correct key.

2013-02-23: The service was down for the last 2 days. Earlier, i created a script and a crontab entry to watch this problem, then temporarily disabled the crontab, and forgot to enable it again. it is now enabled and tested to work.

2013-04-24: A bug that caused the service to crash sometimes was fixed. This bug was the likely cause of the downtimes earlier.

2013-08-28: The service has been down for approximately 5 hours. The original cause of this was downtime of the host node that the VM runs on.

2014-02-20: Downtime is currently caused by a DDoS on this domain's auth DNS servers.

2015-03-09: Downtime is currently caused by downtime of this domain's auth DNS servers.

2015-04-12: Downtime was caused by scheduled work of the provider (a datacentre expansion). i forgot to pass on the advance notice.

2015-11-09: A downtime of 12 hours was caused by a RAID failure of the provider and complications arising from this.

2017-04-27: The service was down for the last 5 days. The suspected cause is connectivity interruption due to a routing problem at the provider.

2017-06-02: The service was down for the last 6 hours. This is the same problem as last time but i caught it earlier due to improved monitoring.

2017-09-09: I moved the service to a different provider, to get away from the old provider's connectivity downtime problems. What should have been a seamless move became a one hour downtime, because the DNS provider decided to serve a NXDOMAIN answer with a 1 hour TTL, for about 5-10 minutes, before serving the new IP, so everything ended up caching that.

2018-01-18: The service was down for 18 hours. the provider was contacted. the cause is unknown.

2018-06-24: a new script function llRequestUserKey was added to Second Life, obsoleting name2key services. This service is now deprecated.

2018-07-16: The service was down for the last 15 hours. It it some sort of data corruption problem with the provider.

2019-06-08: The service was down for the last 2 days. The provider did not respond to tickets and the service is now up on a different provider.


I can be contacted by emailing beware at this domain or inworld,

Beware Hax

beware hax