required to extract the information.
A good way to make use of the coordinates is the following command:
-verb(xplanet --shade 100 --marker developers.coords --color white \
+verb(xplanet --shade 100 --marker_ developers.coords --color white \
--output developers.map.jpeg --geometry 750x450)
manpageoptions()
raise;
Done(File,F,Fdb);
+# Generate the anon XEarth marker file
+def GenMarkers(l,File):
+ F = None;
+ Fdb = None;
+ try:
+ F = open(File + ".tmp","w");
+ Fdb = None;
+
+ # Fetch all the users
+ global PasswdAttrs;
+ if PasswdAttrs == None:
+ raise "No Users";
+
+ # Write out the email address for each user
+ for x in PasswdAttrs:
+ if x[1].has_key("latitude") == 0 or x[1].has_key("longitude") == 0:
+ continue;
+ try:
+ F.write("%8s %8s \"\"\n"%(DecDegree(x,"latitude",1),DecDegree(x,"longitude",1)));
+ except:
+ pass;
+
+ # Oops, something unspeakable happened.
+ except:
+ Die(F,Fdb);
+ raise;
+ Done(File,F,Fdb);
+
# Connect to the ldap server
l = ldap.open(LDAPServer);
F = open(PassDir+"/pass-"+pwd.getpwuid(posix.getuid())[0],"r");
["uid","uidnumber","gidnumber","supplementarygid",\
"gecos","loginshell","userpassword","shadowlastchange",\
"shadowmin","shadowmax","shadowwarning","shadowinactive",
- "shadowexpire","emailforward"]);
+ "shadowexpire","emailforward","latitude","longitude"]);
# Open the control file
if len(sys.argv) == 1:
GenGroup(l,OutDir+"group",GroupList);
GenShadow(l,OutDir+"shadow",GroupList);
GenForward(l,OutDir+"forward-alias",GroupList);
+ GenMarkers(l,OutDir+"markers");
+
cd /tmp/
cd /var/lib/misc > /dev/null 2>&1 || cd /var/state/glibc/ > /dev/null 2>&1 || cd /var/db/ > /dev/null 2>&1
lockfile -r 1 -l 3600 lock
+trap "rm -f lock > /dev/null 2>&1" exit
rsync -e ssh -rp sshdist@samosa:/var/cache/userdir-ldap/hosts/$HOST . > /dev/null 2>&1
makedb $HOST/passwd.tdb -o passwd.db > /dev/null 2>&1
makedb $HOST/shadow.tdb -o shadow.db > /dev/null 2>&1
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();
- Val = string.atof(GetAttr(Attr,Type));
-
- if (abs(Val) >= 1806060.0):
- raise ValueError,"Too Big";
-
- # Val is in DGMS
- if abs(Val) >= 18060.0 or len(Parts[0]) > 5:
- Val = Val/100.0;
- Secs = Val - long(Val);
- Val = long(Val)/100.0;
- Min = Val - long(Val);
- Val = long(Val) + (Min*100.0 + Secs*100.0/60.0)/60.0;
-
- # Val is in DGM
- elif abs(Val) >= 180 or len(Parts[0]) > 3:
- Val = Val/100.0;
- 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;
- return Str;
-
# Main program starts here
User = pwd.getpwuid(posix.getuid())[0];
BindUser = User;
Count = Count + 1;
try:
if Anon != 0:
- F.write("%8s %8s \"\"\n"%(DecDegree(x,"latitude"),DecDegree(x,"longitude")));
+ F.write("%8s %8s \"\"\n"%(DecDegree(x,"latitude",Anon),DecDegree(x,"longitude",Anon)));
else:
- F.write("%16s %16s \"%s\" \t# %s\n"%(DecDegree(x,"latitude"),DecDegree(x,"longitude"),GetAttr(x,"uid"),EmailAddress(x)));
+ F.write("%16s %16s \"%s\" \t# %s\n"%(DecDegree(x,"latitude",Anon),DecDegree(x,"longitude",Anon),GetAttr(x,"uid"),EmailAddress(x)));
except:
Failed = Failed + 1;
if Anon == 0:
if Fast == 0:
print;
return Outstanding;
+
+# Convert a lat/long attribute into Decimal degrees
+def DecDegree(Attr,Type,Anon=0):
+ Parts = re.match('[+-]?(\d*)\\.?(\d*)?',GetAttr(Attr,Type)).groups();
+ Val = string.atof(GetAttr(Attr,Type));
+
+ if (abs(Val) >= 1806060.0):
+ raise ValueError,"Too Big";
+
+ # Val is in DGMS
+ if abs(Val) >= 18060.0 or len(Parts[0]) > 5:
+ Val = Val/100.0;
+ Secs = Val - long(Val);
+ Val = long(Val)/100.0;
+ Min = Val - long(Val);
+ Val = long(Val) + (Min*100.0 + Secs*100.0/60.0)/60.0;
+
+ # Val is in DGM
+ elif abs(Val) >= 180 or len(Parts[0]) > 3:
+ Val = Val/100.0;
+ Min = Val - long(Val);
+ Val = long(Val) + Min*100.0/60.0;
+
+ if Anon != 0:
+ Str = "%3.2f"%(Val);
+ else:
+ Str = str(Val);
+ if Val >= 0:
+ return "+" + Str;
+ return Str;