Categories
Technologie & techniek

Verifying FLAC files

Having everything in a digital form can have it downsides just like having your music on CD’s for example. Things may go wrong a give you bad data. Rhythmbox for example was complaining that a FLAC file couldn’t be recognized. This could be a corrupted FLAC file or that Gstreamer, the backend behind Rhythmbox, contained a bug.

After reading the manpage for FLAC it appears that there is a way to analyze a FLAC file. In the example below a FLAC file is being tested and it converts any warning into an error.

$ flac -w -t The\ Cranberries\ -\ 09\ -\ Copycat.flac 

flac 1.2.1, Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are
welcome to redistribute it under certain conditions.  Type `flac' for details.

The Cranberries - 09 - Copycat.flac: ok
$

The file seems to be correct and starts the job to find the issue in Gstreamer or Rhythmbox.

Categories
Internet, Unix en security

The hunt for /etc/.pwd.lock

After upgrade Debian to kernel 3.0.0, I saw a hidden file called .pwd.lock in /etc which I didn’t noticed before. Checking other machines gave the same result as shown below, but both without a matching Debian-package or manpage.

$ ls -l /etc/.pwd.lock
-rw-------. 1 root root 0 feb 27  2009 /etc/.pwd.lock
$ ls -l --time=atime /etc/.pwd.lock
-rw-------. 1 root root 0 apr 10  2010 /etc/.pwd.lock
$ ls -l --time=ctime /etc/.pwd.lock
-rw-------. 1 root root 0 aug 14  2010 /etc/.pwd.lock

As time match at least the installation date of the machine and exists on other machines it appears to be a valid file, but with what purpose? After reading the Linux Programmer’s Manual two functions called lckpwdf and ulckpwdf where candidates for using this file. Checking the source code at Sourceware confirmed that both lckpwdf and ulckpwdf are using the file. And reading the manpage about these functions also confirms it’s purpose, a lock file the commands like passwd.

The lckpwdf() function is intended to protect against multiple simulta‐
neous accesses of the shadow password database. It tries to acquire a
lock, and returns 0 on success, or -1 on failure (lock not obtained
within 15 seconds). The ulckpwdf() function releases the lock again.
Note that there is no protection against direct access of the shadow
password file. Only programs that use lckpwdf() will notice the lock.

These were the functions that formed the original shadow API. They are
widely available.

This is another example why open source matters. You can get the evidence when you want and/or need instead of trusting some manual to explain things. Verification will become more important as systems get more complex. It was/is also a big advantage when OpenSolaris was created with it’s web accessible source repository.

Categories
Internet, Unix en security

Commando mkdir

Hoewel veel commando’s simpel lijken en door iedereen ze volledig lijkt te begrijpen is het lezen van een manpage soms best handig. Je komt veel nieuwe dingen te waar je nooit aan gedacht had en zo ook met het command mkdir. Een commando vaak gebruikt bij het inrichten en soms ook vaak met het command chmod om permissies goed te zetten. Dit terwijl dit ook met de m-flag kan welke de permissies aanpast van de uiteindelijke directory.

mkdir -m 0700 /path/to/example

Het kan ook gebeuren dat je bijvoorbeeld /path/to/example wilt aanmaken, maar /path/to bestaat soms nog niet. Nu kan je met condities gaan werken om dat af te vangen en dit kan soms best lastig zijn als de directorystructuur vele niveau’s heeft. Een ander probleem is dat het gebruik van variabele paden in scripts een probleem kan vormen. Voor dit probleem is er de p-flag welke ontbrekende bovenliggende directories automatisch voor je aanmaakt.

mkdir -p /path/to/example

Helaas is er nog geen optie om de eigenaar en de groep ook direct te zetten. Als iemand zin heeft om een patch te schrijven, graag en bij deze. De vraag blijft dan wel wie hem allemaal zal overnemen in andere implementaties van mkdir.