Re: Why DNS blacklists don’t work for IPv6 networks

Today @hakmem tweeted a blog post by John Levine entitled «Why DNS blacklists don’t work for IPv6 networks«.

I find the last paragraph very interesting:

For the most part mail systems simply won’t use IPv6 addresses, since all the mail that anyone wants will continue to be sent using IPv4.

How do you define «All the mail that anyone wants» ?
What I want in my email, is not always what another person wants.

Why will it continue to be sent using IPv4, when every dual-stack server that runs an MTA these days *prefers* IPv6 transport when it is available?

Find duplicate UIDs in passwd

A friend recently told me of a small problem he was asked to resolve:
«Find all duplicate UIDs in your /etc/passwd file. Print them along with the associated usernames. You may use shell, perl or python».

My first, almost instant, response was the following

awk -F: '{print $1,$3}' /etc/passwd | \
sort | uniq -c | \
awk '{if ($1 > 1) {print $3, $2}}'

But using the passwd sample below, I found a bug.

root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
unbound:x:1001:1001:Un Bound,,,:/home/unbound:/bin/bash
nsd:x:1002:1002:,,,:/home/nsd:/bin/bash
nsd:x:1002:1002:,,,:/home/nsd:/bin/bash
nsd:x:1002:1002:,,,:/home/nsd:/bin/bash
insd:x:1002:1002:,,,:/home/nsd:/bin/bash

It misses the «insd» username, because it only prints out lines that contain the same uid *and* username.

So my second attempt was using perl

#!/usr/bin/perl

open(F, "</etc/passwd");
while (<F>) {
    @line = split(/:/, $_);
    $accounts{$line[2]} .= "$line[0] "; # build a hash, with uid as the key
}
close(F);

for $uid ( keys %accounts ) {
    @usernames = split(/ /, $accounts{$uid});
    if ($#usernames > 0) {
        print "$uid @usernames\n";
    }
}

Now that’s more like it :-)

Ελληνικά ή Αγγλικά;

Ρώτησε σ’ενα tweet ο @pgaval:

Νεφοπληροφορική ο προτεινόμενος από τον @sterzidi όρος για το cloud computing. Να τον κρατήσουμε;

και ο @hakmem απάντησε:

ΓΙΑΤΙ πρέπει να μεταφράζουμε κάθε όρο;


Ποτέ δεν είμουν υπέρ της μετάφρασης των πάντων στα Ελληνικά.
Οσοι είναι υπερ, παρακαλώ να σταματήσουν να διαβάζουν το περιοδικό RAM και να διαβάζουν το ΜΤΠ.

Η πρώτη κίνηση που κάνω όταν παίρνω κάτι καινούριο είναι να το γυρίσω στα Αγγλικά. Οταν ψάχνω να διαβάσω το manual, ψάχνω το Αγγλικό. Οταν βλέπω μια ταινία, ακούω τα Αγγλικά περισσότερο απ’οτι διαβάζω τους υπότιτλους. Ακόμα και ένα βιβλίο που διαβάζω αυτές τις μέρες, το οποίο είναι μετάφρασμένο στα Ελληνικά, όσο το διαβάζω προσπαθώ να καταλάβω πως το είχε γράψει ο συγγραφέας στα Αγγλικά. Δεν ξέρω αν είναι καλό ή κακό, πάντως το κάνω.

Φταίει ότι όταν ξεκίνησα να χρησιμοποιώ Η/Υ τα πάντα ήταν στα Αγγλικά; Φταίει ότι πήγα σε Αγγλικά πανεπιστήμια και έμαθα να παίρνω τη γνώση σ’αυτή τη γλώσσα; Φταίει η ποιότητα των μεταφράσεων;

Υπάρχουν πολλοί άνθρωποι που δουλεύουν για να εξελληνίσουν software/manuals/βιβλιά και δε θέλω να μειώσω τη δουλειά τους. Το σωστό είναι να κάνουν μετάφραση ή να κάνουν απόδοση όμως; Η μετάφραση είναι αντικειμενική, η απόδοση είναι υποκειμενική.

Σ’ενα  tablet pc που κοιτούσα χθες, η Ελληνική περιγραφή που είχε έλεγε ότι διαθέτει «συναγερμό» (alarm) αντί για ξυπνητήρι.
Τη λέξη «menu» τη μεταφράζουμε «εδεσματολόγιο», την αποδίδουμε «επιλογές» ή την αφήνουμε «μενού»;

Από την άλλη, αν δε δούλευαν αυτοί οι άνθρωποι τόσα χρόνια τώρα, δε θα μπορούσε ποτέ ο θείος μου (>55 χρονών, δε γνωρίζει Αγγλικά) να έχει υπολογιστή στο σπίτι και να δουλεύει άνετος χωρίς πρόβλημα. Οι μεταφράσεις που έγιναν πριν 10 χρόνια, διορθώθηκαν, ωρίμασαν, έγιναν κτήμα πολλών και αποδεκτές από τους περισσότερους.

Απο την άλλη όμως, κάποιος μου είπε οτι μια από τις χώρες με το υψηλότερο ποσοστό localization είναι η Τουρκία (citation needed). Μεταφράζουν τα πάντα, ειδικά στην τηλεόραση, γιατί αλλιώς δε θα τα έβλεπε κανείς. Αυτό καλύτερο είναι;

Automagically generate reverse from forward zones

Given a (forward) zone file, here is a quick way to automagically generate all the reverse zone files you need:

#!/usr/bin/perl
#
# does not generate PTR records for $GENERATE lines
# does not generate PTR records for CNAME and AAAA RRs
# generates PTR records for A RRs
#
%revzones = ();
$domain = $ARGV[0] || "irc.gr";
$filter = $ARGV[1] || '\S+';

open (F, "<$domain");
while (<F>) {
	next if ($_ =~ /^[;\#\$]/);
	if ($_ =~ /(\S+)[\s]+(\d+[\s]+)?IN[\s]+A[\s]($filter)/) {
		$host = $1;
		$ip = $3;
		($a, $b, $c, $d) = split (/\./, $ip);
		$revzone = "$c.$b.$a.in-addr.arpa";
		$ptr = "$d\tIN\tPTR\t$host.$domain.\n";
		$revzones{$revzone} .= $ptr;
	}
}
close (F);

open (NC, ">named.conf.rev");
foreach $revzone ( sort keys %revzones ) {
	open (R, ">$revzone");
	print R "\$INCLUDE \"soa-ns.inc\"\n";
	print R "$revzones{$revzone}";
	close (R);
	print NC "zone \"$revzone\" { type master; file \"rev/$revzone\"; };\n";
}
close (NC);

Careful as it will overwrite any existing reverse zone files you have in your current working directory.

PS. I do have one zone that generates 263 reverse zone files!