From a08a09f4b8ae3e3a34d26e4441ec4c6a6fa18e1c Mon Sep 17 00:00:00 2001 From: jgg <> Date: Wed, 22 Sep 1999 03:51:16 +0000 Subject: [PATCH] xearth anonomizer --- doc/ud-xearth.1.yo | 6 ++++++ ud-xearth | 31 +++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/doc/ud-xearth.1.yo b/doc/ud-xearth.1.yo index 666c903..c25b71d 100644 --- a/doc/ud-xearth.1.yo +++ b/doc/ud-xearth.1.yo @@ -22,6 +22,12 @@ dit(bf(-u)) Set the authentication user. This is the user who's authority is used when accessing the LDAP directory. The default is to use the current system user name. + +dit(bf(-a)) +Anonomize the data. Coordinates are truncated and no names are printed. For +best results the output should be sorted using 'sort -n'. Otherwise the output +is sorted by name.. + enddit() manpagefiles() diff --git a/ud-xearth b/ud-xearth index b1c1fee..cec3308 100755 --- a/ud-xearth +++ b/ud-xearth @@ -17,6 +17,8 @@ import string, re, time, ldap, getopt, sys, pwd, posix; from userdir_ldap import *; +Anon = 0; + # This needs to check for leading 0 to disambiguate some things def DecDegree(Attr,Type): Parts = re.match('[+-]?(\d*)\\.?(\d*)?',GetAttr(Attr,Type)).groups(); @@ -39,17 +41,23 @@ def DecDegree(Attr,Type): Min = Val - long(Val); Val = long(Val) + Min*100.0/60.0; + if Anon != 0: + Str = "%3.3f"%(Val); + else: + Str = str(Val); if Val >= 0: - return "+" + str(Val); - return str(Val); + return "+" + Str; + return Str; # Main program starts here User = pwd.getpwuid(posix.getuid())[0]; BindUser = User; -(options, arguments) = getopt.getopt(sys.argv[1:], "u:") +(options, arguments) = getopt.getopt(sys.argv[1:], "au:") for (switch, val) in options: if (switch == '-u'): - User = val + User = val; + if (switch == '-a'): + Anon = 1; # Connect to the ldap server l = ldap.open(LDAPServer); @@ -61,20 +69,27 @@ l.simple_bind_s(UserDn,Password); Attrs = l.search_s(BaseDn,ldap.SCOPE_ONELEVEL,"latitude=*",\ ["uid","cn","mn","sn","latitude","longitude"]); -#ttrs = [('uid=bma,ou=users,dc=debian,dc=org', {'longitude': ['-0771426.059'], 'sn': ['Almeida'], 'cn': ['Brian'], 'latitude': ['0384514.263'], 'uid': ['bma']}), ('uid=jgg,ou=users,dc=debian,dc=org', {'longitude': ['-11328'], 'sn': ['Gunthorpe'], 'cn': ['Jason'], 'latitude': ['+5333'], 'uid': ['jgg']})] Attrs.sort(); print "Markers file will be written to markers.dat,", sys.stdout.flush(); F = open("markers.dat","w"); Count = 0; +Failed = 0; for x in Attrs: if x[1].has_key("latitude") == 0 or x[1].has_key("longitude") == 0: continue; Count = Count + 1; try: - F.write("%16s %16s \"%s\" \t# %s\n"%(DecDegree(x,"latitude"),DecDegree(x,"longitude"),GetAttr(x,"uid"),EmailAddress(x))); + if Anon != 0: + F.write("%8s %8s \"\"\n"%(DecDegree(x,"latitude"),DecDegree(x,"longitude"))); + else: + F.write("%16s %16s \"%s\" \t# %s\n"%(DecDegree(x,"latitude"),DecDegree(x,"longitude"),GetAttr(x,"uid"),EmailAddress(x))); except: - F.write("# Failed %s => %s: %s\n" %(x[0],sys.exc_type,sys.exc_value)); + Failed = Failed + 1; + if Anon == 0: + F.write("# Failed %s => %s: %s\n" %(x[0],sys.exc_type,sys.exc_value)); + else: + F.write("# Failed => %s: %s\n" %(sys.exc_type,sys.exc_value)); F.close(); -print Count,"entries."; +print Count,"entries,",Failed,"failures."; -- 2.20.1