Newbie app-writing question
Nathan Yocom
nate at yocom.org
Mon Jun 14 17:38:24 UTC 2004
> amount of examples and references I've found [1], I *think* I need to write a
> new conversation function and pass that to pam_start(), but I haven't figured
> out the propper syntax to do that [2].
Correct.. kind of.
> int static_conv(int n, const struct pam_message **msg,
> struct pam_response **resp, void *data)
the void * here is for your "custom" data. I usually define a structure
like:
// The structure used to pass a username and password to pam
typedef struct auth_struct
{
// Username to authenticate
const char *username;
// Password to use
const char *password;
} auth_struct;
Then setup a conversation structure for PAM:
static struct pam_conv myauthconv = {
auth_conv, // conversation function
NULL
};
And finally, fill in and provide the auth structure:
struct auth_struct buffer;
buffer.username = username;
buffer.password = password;
myauthconv.appdata_ptr = &buffer; // This is the meat of the idea here
- we need to tell PAM to pass our structure as the 'user defined data'
in the last argument of our conversation function
Now when your conv callback gets hit, pam will pass it the appdata_ptr
as the last argument and you can cast it back to a structure and get
whatever info you needed out of it.
Hope that helps!
Nate Yocom
Also - Note that I have written an entire section on writing PAM aware
applications for use with network programming in my (co-authored)
upcoming title: http://www.apress.com/book/bookDisplay.html?bID=309 -
The Definitive Guide to Linux Network Programming - pre-order your copy
today!
More information about the Pam-list
mailing list