Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2010-01-18 Thread Steve Langasek
On Sat, Jan 16, 2010 at 03:31:28PM +0100, Wouter Verhelst wrote:
 There was no further discussion on this item since the above date.

FWIW, I for one hadn't commented up to now because I find that
fundamentally, implementing a compatible commandline interface for
ifup/ifdown and not implementing support for /etc/network/interfaces is
precisely backwards, and I was waiting to see if anyone else would speak to
this point.

AFAICS, there are only two places in the system where other packages
integrate by calling ifup/ifdown: /etc/init.d/networking, and
/lib/udev/net.agent.  The former ought to be all but obsoleted by the latter
(N.B.: should, but isn't), and the latter could just as well be moved to
the ifupdown package itself and a corresponding agent be provided by any
conflicting packages.

So the commandline ifup/ifdown interface is of little relevance, whereas the
configuration state contained in /etc/network/interfaces is of vital
importance to the operation of the system and I would expect anyone trying
to replace ifupdown to handle this critical configuration migration issue.

-- 
Steve Langasek   Give me a lever long enough and a Free OS
Debian Developer   to set it on, and I can move the world.
Ubuntu Developerhttp://www.debian.org/
slanga...@ubuntu.com vor...@debian.org


signature.asc
Description: Digital signature


Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2010-01-18 Thread Wouter Verhelst
On Mon, Jan 18, 2010 at 01:56:17AM -0800, Steve Langasek wrote:
 On Sat, Jan 16, 2010 at 03:31:28PM +0100, Wouter Verhelst wrote:
  There was no further discussion on this item since the above date.
 
 FWIW, I for one hadn't commented up to now because I find that
 fundamentally, implementing a compatible commandline interface for
 ifup/ifdown and not implementing support for /etc/network/interfaces is
 precisely backwards, and I was waiting to see if anyone else would speak to
 this point.
 
 AFAICS, there are only two places in the system where other packages
 integrate by calling ifup/ifdown: /etc/init.d/networking, and
 /lib/udev/net.agent.  The former ought to be all but obsoleted by the latter
 (N.B.: should, but isn't), and the latter could just as well be moved to
 the ifupdown package itself and a corresponding agent be provided by any
 conflicting packages.

Indeed. In fact, I had assumed that that initscript was, indeed, part of
the ifupdown package; so much so, in fact, that I hadn't even checked.
Thanks for pointing that out.

 So the commandline ifup/ifdown interface is of little relevance, whereas the
 configuration state contained in /etc/network/interfaces is of vital
 importance to the operation of the system and I would expect anyone trying
 to replace ifupdown to handle this critical configuration migration issue.

It's a fair point, but one I happen not to agree with.

As an example, ifplugd has a default configuration that calls 'ifup'
when it discovers that the MII reports a link. I think this is a valid
case of something using the 'ifup' binary, and not something that needs
to be migrated away (at least not until the daemon functionality of
ipcfg has been implemented, which might take a while). That's a third
example (added to your two above); I'm sure there are more. I think the
use of ifup/ifdown as an interface to manage network interfaces (no pun
intended) is more widespread than you seem to believe.

Second, the main reason I chose not to support the
/etc/network/interfaces at this phase is that I believe it is
fundamentally limited in what it can support: it makes the assumption
that whenver the user calls 'ifup something', we already know which
interfaces we're going to be configuring. I specifically do not wish to
support that assumption. Now of course I could extend the interfaces
format to allow this, but I'm afraid that's going to be kludgy at best.
That's why I started off with a different file format.

Of course upgradeability is a major cause for concern, and if ipcfg is
ever going to replace ifupdown then at one point or another I'll have to
deal with this issue. I'm not sure yet how I'll be doing that; it could
be by way of a perl script to convert an interfaces file to an ipcfg
config file, or it could be by way of an alternate parser. It's not
something I want to deal with now, however -- first things first; while
it's in experimental now, I don't think it'll be ready for unstable in
time for squeeze -- I'd even be surprised if it was ready for prime time
in time for squeeze+1.

Third, I do not see any good reason why any configuration file format
should be part of a described interface. If another software package
wishes to do something with network interfaces consistently with ifup's
configuration, then that package should not try to read ifup's config
file -- it should be calling ifup with the necessary parameters to
accomplish what it needs to do. We might need to extend the interface to
allow querying of available configuration to allow this better, but
that's about it. If another package wishes to write ifup's configuration
file, then either it is doing something utterly wrong and against
policy, or it is a user configuration agent that needs to know much
about the inner workings of the particular ifup implementation it is
working for anyway, and has no business depending on a virtual package.

Regards,

-- 
The biometric identification system at the gates of the CIA headquarters
works because there's a guard with a large gun making sure no one is
trying to fool the system.
  http://www.schneier.com/blog/archives/2009/01/biometrics.html



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2010-01-17 Thread Wouter Verhelst
On Sat, Jan 16, 2010 at 06:09:19PM +0100, Bill Allombert wrote:
 On Sat, Jan 16, 2010 at 03:31:28PM +0100, Wouter Verhelst wrote:
  On Thu, Nov 05, 2009 at 09:54:37AM +0100, martin f krafft wrote:
  [...response that is not very relevant to this mail...]
  
  There was no further discussion on this item since the above date. Since
  I've recently uploaded ipcfg, I'd like this to be finalized. It
  currently uses 'ifupdown' as the name to conflict/replace/provide, but I
  don't consider that to be a particularly good idea.
  
  I'm suggesting that the package name 'network-config-tool' be described
  as a tool for a package providing 'ifup' and 'ifdown' binaries. These
  should provide the following interface:
  
  - support 'ifup interface name' or 'ifdown interface name' to bring
an interface up or down, consistently with configuration, and exit
with non-zero if either operation fails.
 
 Is ifup eth0=foo supported ?

Should be fairly easy to add that to ipcfg, which might be a good idea.
Let's make that part of the interface, too.

  - may provide a virtual interface name that does not map to an actual
physical interface name, but instead uses internal logic to decide
what to do.
 
 Is not there a namespace issues wrt other interface that should be clarified ?

There are namespace issues, but I don't think they should be explained
in the interface specification; the tools should do so in their
documentation.

This is a may part of the specification, not a should.

  - ifup and ifdown should support a '-a' or '--all' option to configure
or deconfigure 'all' interfaces. Here, 'all' is defined as 'all
interfaces for which the tool's configuration defines that they should
be brought up or down with the -a option'.
 
 OK.
 
  - ifup and ifdown should support a '-v' or '--verbose' option to aid in
debugging.
 
 This requirement does not feel necessary.

If a tool calls ifup, it may wish to call it with -v to provide some
output to the user should bringing the interface up fail, which can be
useful. Perhaps it should be clarified that the output format of -v is
undefined.

  - ifup and ifdown should support hook scripts in
/etc/network/if-*.d:
- the tool should provide a way for the user to set configuration
  values through environment variables, the name of which start with
  IF_
- the tool should provide PHASE and MODE variables, describing what
  we're trying to do
- (since I could not find a formal specification of the if-*.d hook
  script interface, I may have missed some things; if so, please let
  me know)

Obviously this also needs the IFACE= environment variable, defining the
interface on which we work.

-- 
The biometric identification system at the gates of the CIA headquarters
works because there's a guard with a large gun making sure no one is
trying to fool the system.
  http://www.schneier.com/blog/archives/2009/01/biometrics.html



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2010-01-17 Thread Bill Allombert
On Sun, Jan 17, 2010 at 10:11:58AM +0100, Wouter Verhelst wrote:
 On Sat, Jan 16, 2010 at 06:09:19PM +0100, Bill Allombert wrote:
 an interface up or down, consistently with configuration, and exit
 with non-zero if either operation fails.
  
  Is ifup eth0=foo supported ?
 
 Should be fairly easy to add that to ipcfg, which might be a good idea.
 Let's make that part of the interface, too.

OK.

   - may provide a virtual interface name that does not map to an actual
 physical interface name, but instead uses internal logic to decide
 what to do.
  
  Is not there a namespace issues wrt other interface that should be 
  clarified ?
 
 There are namespace issues, but I don't think they should be explained
 in the interface specification; the tools should do so in their
 documentation.

I mention it to avoid e.g. eth0=foo to have a very different meaning in
each implementation.


   - ifup and ifdown should support a '-v' or '--verbose' option to aid in
 debugging.
  
  This requirement does not feel necessary.
 
 If a tool calls ifup, it may wish to call it with -v to provide some
 output to the user should bringing the interface up fail, which can be
 useful. Perhaps it should be clarified that the output format of -v is
 undefined.

OK then. The point is that it should be safe to call 'ifup -v' to get some
detail (if any).

Cheers,
-- 
Bill. ballo...@debian.org

Imagine a large red swirl here. 



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2010-01-16 Thread Wouter Verhelst
On Thu, Nov 05, 2009 at 09:54:37AM +0100, martin f krafft wrote:
[...response that is not very relevant to this mail...]

There was no further discussion on this item since the above date. Since
I've recently uploaded ipcfg, I'd like this to be finalized. It
currently uses 'ifupdown' as the name to conflict/replace/provide, but I
don't consider that to be a particularly good idea.

I'm suggesting that the package name 'network-config-tool' be described
as a tool for a package providing 'ifup' and 'ifdown' binaries. These
should provide the following interface:

- support 'ifup interface name' or 'ifdown interface name' to bring
  an interface up or down, consistently with configuration, and exit
  with non-zero if either operation fails.
- may provide a virtual interface name that does not map to an actual
  physical interface name, but instead uses internal logic to decide
  what to do.
- ifup and ifdown should support a '-a' or '--all' option to configure
  or deconfigure 'all' interfaces. Here, 'all' is defined as 'all
  interfaces for which the tool's configuration defines that they should
  be brought up or down with the -a option'.
- ifup and ifdown should support a '-v' or '--verbose' option to aid in
  debugging.
- ifup and ifdown should support hook scripts in
  /etc/network/if-*.d:
  - the tool should provide a way for the user to set configuration
values through environment variables, the name of which start with
IF_
  - the tool should provide PHASE and MODE variables, describing what
we're trying to do
  - (since I could not find a formal specification of the if-*.d hook
script interface, I may have missed some things; if so, please let
me know)

Comments are welcome.

[aj: I haven't seen any comment from you on this, and would like to make
sure that you're comfortable with whatever interface we come up with --
please comment.]

-- 
The biometric identification system at the gates of the CIA headquarters
works because there's a guard with a large gun making sure no one is
trying to fool the system.
  http://www.schneier.com/blog/archives/2009/01/biometrics.html



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2010-01-16 Thread Bill Allombert
On Sat, Jan 16, 2010 at 03:31:28PM +0100, Wouter Verhelst wrote:
 On Thu, Nov 05, 2009 at 09:54:37AM +0100, martin f krafft wrote:
 [...response that is not very relevant to this mail...]
 
 There was no further discussion on this item since the above date. Since
 I've recently uploaded ipcfg, I'd like this to be finalized. It
 currently uses 'ifupdown' as the name to conflict/replace/provide, but I
 don't consider that to be a particularly good idea.
 
 I'm suggesting that the package name 'network-config-tool' be described
 as a tool for a package providing 'ifup' and 'ifdown' binaries. These
 should provide the following interface:
 
 - support 'ifup interface name' or 'ifdown interface name' to bring
   an interface up or down, consistently with configuration, and exit
   with non-zero if either operation fails.

Is ifup eth0=foo supported ?

 - may provide a virtual interface name that does not map to an actual
   physical interface name, but instead uses internal logic to decide
   what to do.

Is not there a namespace issues wrt other interface that should be clarified ?

 - ifup and ifdown should support a '-a' or '--all' option to configure
   or deconfigure 'all' interfaces. Here, 'all' is defined as 'all
   interfaces for which the tool's configuration defines that they should
   be brought up or down with the -a option'.

OK.

 - ifup and ifdown should support a '-v' or '--verbose' option to aid in
   debugging.

This requirement does not feel necessary.

 - ifup and ifdown should support hook scripts in
   /etc/network/if-*.d:
   - the tool should provide a way for the user to set configuration
 values through environment variables, the name of which start with
 IF_
   - the tool should provide PHASE and MODE variables, describing what
 we're trying to do
   - (since I could not find a formal specification of the if-*.d hook
 script interface, I may have missed some things; if so, please let
 me know)

Can't comment.

 [aj: I haven't seen any comment from you on this, and would like to make
 sure that you're comfortable with whatever interface we come up with --
 please comment.]

I agree that the agreement of the ifupdown maintainers is very important.

Cheers,
-- 
Bill. ballo...@debian.org

Imagine a large red swirl here. 


signature.asc
Description: Digital signature


Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2009-11-04 Thread martin f krafft
also sprach Wouter Verhelst wou...@debian.org [2009.11.04.0230 +0100]:
 Since to me the point of this exercise is so that I can usefully
 put ipcfg into the archive, and since ipcfg does not actually
 support /etc/network/interfaces, I'd say that should not be part
 of the interface.

Hehe, but interface definitions usually describe the status quo from
the users' perspective, not the state of development of a new tool
aiming interface compatibility. Gosh, I wish the ISO 9000 specs
worked that way! ;)

It *is* questionable how mucn /e/n/i is part of the interface
though.

 I do have code to support /etc/network/if-*.d/*, though I consider
 that a temporary hack so that the code would be useful sooner
 rather than later. It also doesn't work yet ;-)

Okay. I definitely think the hooks are part of the interface that we
need to support in any network configuration tool.

  Especially the hooks are integral to a lot of other packages that
  depend on ifupdown. I'd say that's part of any Debian
  network-config-tool interface.
 
 Basically, the interface that I'd like to see is tool that can bring up
 a given interface as configured by the user. E.g., if ifplugd calls
 ifup eth0, it should not care which implementation of ifup is being
 called to actually bring the interface up.

Yes. But there are tools that will call it with --verbose, or with
--all. I think we agree anyway.

 Depends: (...), ifupdown (= 0.6.8+nmu3) | network-config-tool, (...)
 
 because this is a matter of we need at least this version of ifupdown
 to work properly rather than we absolutely need ifupdown; after all,
 it's ifupdown or ipcfg that calls dhclient, not the other way around.

That does seem weird and should not be needed, indeed.

Cheers,

-- 
 .''`.   martin f. krafft madd...@d.o  Related projects:
: :'  :  proud Debian developer   http://debiansystem.info
`. `'`   http://people.debian.org/~madduckhttp://vcs-pkg.org
  `-  Debian - when you have better things to do than fixing systems
 
i love deadlines. i like the whooshing
 sound they make as they fly by.
  -- douglas adams


digital_signature_gpg.asc
Description: Digital signature (see http://martin-krafft.net/gpg/)


Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2009-11-04 Thread Wouter Verhelst
On Wed, Nov 04, 2009 at 10:52:00AM +0100, martin f krafft wrote:
 also sprach Wouter Verhelst wou...@debian.org [2009.11.04.0230 +0100]:
  Since to me the point of this exercise is so that I can usefully
  put ipcfg into the archive, and since ipcfg does not actually
  support /etc/network/interfaces, I'd say that should not be part
  of the interface.
 
 Hehe, but interface definitions usually describe the status quo from
 the users' perspective, not the state of development of a new tool
 aiming interface compatibility.
 
 Gosh, I wish the ISO 9000 specs worked that way! ;)

That'd be nice, wouldn't it? ;-)

 It *is* questionable how mucn /e/n/i is part of the interface though.

Indeed, and that's really my main point. I could also have said that I
don't want to be command-line compatible because it's too much work, but
it's *not* questionable how much *that* is part of the interface, so
yes, that I do intend to be compatbile with.

A config file format is something else; and since, first, Debian
packages are not supposed to modify eachother's configuration files;
and, second, ifupdown makes the relevant values in its configuration
file available through environment variables (so that ifupdown plugins
don't have to parse the ifupdown config file), I think it's not
unreasonable to make the config file format not part of the interface.

Since that would make it easier for me (I'm not aiming for ifupdown
config file compatibility, at all), I'd prefer it that way.

Of course we could define an interface that requires things to be
drop-in replacements for ifupdown, but then I can't use it, and I don't
think there's much point in defining a virtual package that ifupdown
(and ifupdown alone) could put in its Provides: header.

Instead, what I'm trying to accomplish is to come up with an interface
that can be used by packages which want to mangle the state of network
interfaces without actually caring much about how, specifically, it's
done. Since I don't think it can be said that you don't care about that
if you care about a config file format, I think it's fair to exclude
that from this interface.

  I do have code to support /etc/network/if-*.d/*, though I consider
  that a temporary hack so that the code would be useful sooner
  rather than later. It also doesn't work yet ;-)
 
 Okay. I definitely think the hooks are part of the interface that we
 need to support in any network configuration tool.

I'm not sure I fully agree with that, but since the code is there, and
since it's a plugin that can be disabled, I don't actually care all that
much about the issue. So yeah, that can be kept in for all I care :-)

   Especially the hooks are integral to a lot of other packages that
   depend on ifupdown. I'd say that's part of any Debian
   network-config-tool interface.
  
  Basically, the interface that I'd like to see is tool that can bring up
  a given interface as configured by the user. E.g., if ifplugd calls
  ifup eth0, it should not care which implementation of ifup is being
  called to actually bring the interface up.
 
 Yes. But there are tools that will call it with --verbose, or with
 --all. I think we agree anyway.

Supporting --all should not be hard. Basically, I just need to map --all
to ifup auto or ifdown all internally. That's a no-brainer.

Supporting --verbose might be a different issue, and depending on how
it's used, might be a bad idea to support from ipcfg. If the --verbose
output is just used to log stuff or give a user more information, then
that doesn't matter, and I intend to have a --verbose output option,
anyhow. If these commands are parsed and executed somewhere else, it
might be possible to make sure the --verbose option does some output
that these tools can parse, too, but it's an edge case. If the tools try
to parse that information to figure out how to bring an interface down
again later or some such, then they're really exploiting the fact that
ifupdown exposes much about its internals, and it might be said that the
statement that they don't care about how it's done is no longer true
for these tools.

  Depends: (...), ifupdown (= 0.6.8+nmu3) | network-config-tool, (...)
  
  because this is a matter of we need at least this version of ifupdown
  to work properly rather than we absolutely need ifupdown; after all,
  it's ifupdown or ipcfg that calls dhclient, not the other way around.
 
 That does seem weird and should not be needed, indeed.

Actually, I think Andrew should have made that a versioned Conflicts:
rather than a versioned Depends:. I vaguely remember him blogging about
ISC DHCP4 not working properly with ifupdown and that the latter needed
patches. I guess this version is the first one where these patches are
included.

-- 
The biometric identification system at the gates of the CIA headquarters
works because there's a guard with a large gun making sure no one is
trying to fool the system.
  http://www.schneier.com/blog/archives/2009/01/biometrics.html



Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2009-11-03 Thread martin f krafft
also sprach Wouter Verhelst w...@uter.be [2009.11.03.1915 +0100]:
 As such, I'd like to propose the addition of a virtual package
 name, network-config-tool, that would be used for any package
 which provides /sbin/ifup and /sbin/ifdown binaries.

You'll need to be a lot more specific on the interface definition.
Do they have to be binaries? Do they have to take the same flags,
e.g. --force and --all?

What about /etc/network/interfaces and /etc/network/if-*.d/*?
Especially the hooks are integral to a lot of other packages that
depend on ifupdown. I'd say that's part of any Debian
network-config-tool interface.

-- 
 .''`.   martin f. krafft madd...@d.o  Related projects:
: :'  :  proud Debian developer   http://debiansystem.info
`. `'`   http://people.debian.org/~madduckhttp://vcs-pkg.org
  `-  Debian - when you have better things to do than fixing systems


digital_signature_gpg.asc
Description: Digital signature (see http://martin-krafft.net/gpg/)


Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2009-11-03 Thread Wouter Verhelst
On Tue, Nov 03, 2009 at 08:02:31PM +0100, martin f krafft wrote:
 also sprach Wouter Verhelst w...@uter.be [2009.11.03.1915 +0100]:
  As such, I'd like to propose the addition of a virtual package
  name, network-config-tool, that would be used for any package
  which provides /sbin/ifup and /sbin/ifdown binaries.
 
 You'll need to be a lot more specific on the interface definition.
 Do they have to be binaries? Do they have to take the same flags,
 e.g. --force and --all?

With 'binaries', I meant 'executables'. Whether they're scripts or
compiled programs doesn't actually matter to me. Sorry for the
confusion.

The goal is indeed for ipcfg to become command-line compatible with
ifupdown, though I'm not there yet.

 What about /etc/network/interfaces and /etc/network/if-*.d/*?

Since to me the point of this exercise is so that I can usefully put
ipcfg into the archive, and since ipcfg does not actually support
/etc/network/interfaces, I'd say that should not be part of the
interface.

I do have code to support /etc/network/if-*.d/*, though I consider that
a temporary hack so that the code would be useful sooner rather than
later. It also doesn't work yet ;-)

(occasionally, that's the only reason why it's not been uploaded yet)

 Especially the hooks are integral to a lot of other packages that
 depend on ifupdown. I'd say that's part of any Debian
 network-config-tool interface.

Basically, the interface that I'd like to see is tool that can bring up
a given interface as configured by the user. E.g., if ifplugd calls
ifup eth0, it should not care which implementation of ifup is being
called to actually bring the interface up.

However, it should also be sensible to change the Depends: line in
isc-dhcp-client from

Depends: (...), ifupdown (= 0.6.8+nmu3), (...)

to

Depends: (...), ifupdown (= 0.6.8+nmu3) | network-config-tool, (...)

because this is a matter of we need at least this version of ifupdown
to work properly rather than we absolutely need ifupdown; after all,
it's ifupdown or ipcfg that calls dhclient, not the other way around.

Of course there are some packages that just don't make sense without
ifupdown, and there it's fine to not add the network-config-tool
alternative. One example of this is guessnet; ipcfg has a much more
flexible way of doing what guessnet does (in fact it's a design goal),
and therefore does not have support for ifupdown's mapping scripts
that guessnet uses.

-- 
The biometric identification system at the gates of the CIA headquarters
works because there's a guard with a large gun making sure no one is
trying to fool the system.
  http://www.schneier.com/blog/archives/2009/01/biometrics.html


signature.asc
Description: Digital signature


Bug#554194: ifupdown virtual package name and mass-filing (if accepted)

2009-11-03 Thread Wouter Verhelst
Package: debian-policy
Severity: wishlist
X-Debbugs-Cc: debian-de...@lists.debian.org, ifupd...@packages.debian.org

Hi all,

As you may or may not know, I've been working on an alternative
implementation of ifup and ifdown, which I call 'ipcfg', for a few
months now[1]. The code is now nearly at the point where I'll be using
it on my own laptop, at which point I intend to upload it to
experimental, too.

Since it intends to be an ifupdown replacement, and indeed provides
ifup and ifdown binaries, it will have to conflict with ifupdown. As a
result, I'll have to make sure that it can be installed as an
alternative to it, by way of a virtual package name.

As such, I'd like to propose the addition of a virtual package name,
network-config-tool, that would be used for any package which provides
/sbin/ifup and /sbin/ifdown binaries. If accepted, I will also be
mass-filing wishlist bugs on packages that currently depend on ifupdown
only because they need to be able to use ifup and ifdown, or because
they have a versioned dependency on ifupdown to avoid certain bugs, with
a request to provide a network-config-tool alternative.

Thoughts, comments?

[1] The announcement and some more detail can be found at
http://grep.be/blog/en/computer/code/ipcfg/announce

-- 
The biometric identification system at the gates of the CIA headquarters
works because there's a guard with a large gun making sure no one is
trying to fool the system.
  http://www.schneier.com/blog/archives/2009/01/biometrics.html


signature.asc
Description: Digital signature