Mac OS X for Unix Geeks (Leopard)

Errata for Mac OS X for Unix Geeks (Leopard)

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Section 17.1.2 (Not sure of page number, reading online with Safari)

Section 17.1.2 discusses the PerlObjCBridge and says

"You can read the documentation for this module with perldoc PerlObjCBridge"

I think you need "man PerlObjCBridge" to see the docs. "perldoc PerlObjCBridge" doesn't give you any documentation.

Note from the Author or Editor:
Thanks for the correction.

perldoc PerlObjCBridge should work, but there may be some configurations where it doesn't (it does work on my 10.5.5 system). However, in cases where perldoc is misbehaving, man will do the trick.

Anonymous  Sep 16, 2008 
Page Index
Index: mount command

The mount command is not mentioned on page 68 as indicated in the Index.

Note from the Author or Editor:
"mount" entries should be reviewed for next version of the index.

Anonymous  Jan 17, 2009 
Page 92
example 5-2

This code example doesnt work. There are several errors. The corrected code is shown below.

#include <stdio.h>
#include <stdlib.h>
#include <security/pam_appl.h>
#include <security/openpam.h>
#include <security/pam_constants.h>

int main ( int argc, char *argv[] ) {

int retval;
static struct pam_conv pam_conv;
pam_conv.conv = misc_conv;
pam_handle_t *pamh = NULL ;
const char *user = NULL;

if ( argc == 2 )
user = argv[1];
if (!user ) {
fprintf( stderr, "Usage: pam_example <username>\n" );
exit( 1 ) ;

retval = pam_start("pam_example", user, &pam_conv, &pamh );
if ( retval != PAM_SUCCESS ) {
fprintf( stderr, "could not start pam, %s \n", pam_strerror(pamh, retval));
exit( 1 );

the /etc/pam.d/pam_example file as shown on page 93 is also wrong.
It should look like

auth required
account required
password required

Note from the Author or Editor:
Thank you for the correction; I have tested it and it indeed fixes the problem. Note for others reading this: the code shown replaces most of the example, but you'll still need the following lines for it to compile:

/* Try to authenticate the user. This could cause Linux-PAM
* to prompt the user for a password.
retval = pam_authenticate(pamh, 0);
if (retval == PAM_SUCCESS)
fprintf(stderr, "Failure: %s\n", pam_strerror(pamh, retval));

/* Shut down Linux-PAM. Return with an error if
* something goes wrong.
return pam_end(pamh, retval) == PAM_SUCCESS ? 0 : 1;

bruce Peikon  Dec 31, 2009