Subject: Re: getmntopt change
To: Frank van der Linden <fvdl@wasabisystems.com>
From: Simon J. Gerraty <sjg@quick.com.au>
List: tech-userlevel
Date: 02/19/2001 22:28:56
>I need to support some '-o foo=bar' options in mount_nfs, like

FWIW, I had the same need in my sNFS client.  I gave struct mntopt a

void *m_arg;	/* argument, bit to set,value or string */

and the following flags in m_optflags:

#define OPT_NEGATIVE	1
#define OPT_INT		2
#define OPT_STRING	4
#define OPT_FUNC	8

If OPT_INT, I point m_arg at a location to store the value.
If OPT_STRING I strdup() it and point m_arg at it, 
and if OPT_FUNC, I pass the opt=val bit (after strdup)
to the function pointed to by m_arg.
If none of the above, then m_arg just contains the bits to add to the mount 
flags.

Eg. 
#define MOPT_TCP		{ "tcp",	0, (void *)M_TCP }
#define MOPT_AUTH		{ "auth",	0, (void *)M_AUTH }
#define MOPT_PORT		{ "port",	OPT_INT, (void *)&SnfsPort }
#define MOPT_SSLVERIFY		{ "verify",	OPT_FUNC, (void *)ssl_setopt }
#define MOPT_SSLCERT		{ "cert",	OPT_FUNC, (void *)ssl_setopt }
#define MOPT_SSLKEY		{ "key",	OPT_FUNC, (void *)ssl_setopt }
#define MOPT_SSLCIPHER		{ "cipher",	OPT_FUNC, (void *)ssl_setopt }
#define MOPT_PROXY		{ "proxy",	OPT_FUNC, (void *)ssl_setopt }

ssl_setopt() is the routine in my ssl wrapper library that deals with
all the ssl related command line options.

I don't recall if I changed the prototype for getmntopts(), mine is simply:

void getmntopts __P((const char *, const struct mntopt *, int *));

So far I've only ported this (snfsc) to SunOS, Solaris and of course BSD.
I did part of a port for HPUX, but more important things got in the way.

--sjg