Hi,
Now that cooker has a samba-2.0.6, could you add the following patch to
autofs-3.1.3? It just removes the parsing of smbfs-options from mount_smbfs.c,
which is done by smbmount now....
Regards,
Hakan
--
Hakan Tandogan [EMAIL PROTECTED]
ICONSULT Tandogan - Egerer GbR Tel.: +49-9131-9047-0
Memelstrasse 38 - D-91052 Erlangen Fax.: +49-9131-9047-77
diff -wbur autofs-3.1.3/modules/mount_smbfs.c autofs-3.1.3.foo/modules/mount_smbfs.c
--- autofs-3.1.3/modules/mount_smbfs.c Tue Nov 3 22:21:14 1998
+++ autofs-3.1.3.foo/modules/mount_smbfs.c Thu Nov 25 20:26:21 1999
@@ -42,128 +42,38 @@
int satisfies_pwd; /* true if this means we don't need a -n */
};
-static struct smb_mount_opt mount_opt_list[] = {
- { "nocaps", "-C", 0, 0 },
- { "guest", "-n", 0, 1 },
- { "passwd", "-P", 1, 1 },
- { "srvname", "-s", 1, 0 },
- { "mysmbname", "-c", 1, 0 },
- { "login", "-U", 1, 0 },
- { "uid", "-u", 1, 0 },
- { "gid", "-g", 1, 0 },
- { "filemod", "-f", 1, 0 },
- { "dirmod", "-d", 1, 0 },
- { "port", "-p", 1, 0 },
- { "maxxmit", "-m", 1, 0 },
- { NULL, NULL, 0, 0 }
-};
-
int mount_init(void **context)
{
return 0;
}
-static int smb_parse_options(char *optstr, const char **argv,
- char *qbuf, int *qbuflen)
-{
- char *opt;
- int ln;
- int argc;
- int has_pwd;
- int qbufchr, qln;
- struct smb_mount_opt *mount_opt;
-
- has_pwd = 0;
- qbufchr = 0;
- argc = 0;
-
- if ( optstr ) {
- for ( opt = strtok(optstr, ",") ; opt ; opt = strtok(NULL, ",") ) {
- for ( mount_opt = mount_opt_list ; mount_opt->optname ; mount_opt++ ) {
- if ( mount_opt->hasarg ) {
- ln = strlen(mount_opt->optname);
- if ( !strncmp(opt, mount_opt->optname, ln) && opt[ln] == '=' ) {
- qln = strlen(opt)-ln;
- if ( argv ) {
- *(argv++) = mount_opt->optflag;
- memcpy(qbuf, opt+ln+1, qln);
- *(argv++) = qbuf;
- qbuf += qln;
- }
- qbufchr += qln;
- has_pwd = has_pwd || mount_opt->satisfies_pwd;
- argc += 2;
- break;
- }
- } else {
- if ( !strcmp(opt, mount_opt->optname) ) {
- if ( argv )
- *(argv++) = mount_opt->optflag;
- has_pwd = has_pwd || mount_opt->satisfies_pwd;
- argc++;
- break;
- }
- }
- }
- /* Ignore unknown options */
- }
- }
-
- if ( !has_pwd ) {
- syslog(LOG_DEBUG, MODPREFIX "no password option, adding -n");
- if ( argv )
- *(argv++) = "-n";
- argc++;
- }
-
- if ( argv )
- *argv = NULL;
-
- if ( qbuflen )
- *qbuflen = qbufchr;
-
- return argc;
-}
-
int mount_mount(const char *root, const char *name, int name_len,
const char *what, const char *fstype, const char *options,
void *context)
{
- char *fullpath, *optcopy;
+ char *fullpath;
int err;
- char *qbuf;
- int argc, optsize, qbuflen;
+ int argc, i;
const char **argv;
fullpath = alloca(strlen(root)+name_len+2);
- if (options)
- optcopy = alloca(optsize = strlen(options)+1);
- else {
- optsize = 0;
- optcopy = NULL;
- }
- if ( !fullpath || (!optcopy && optsize)) {
- syslog(LOG_ERR, MODPREFIX "alloca: %m");
- return 1;
- }
sprintf(fullpath, "%s/%s", root, name);
- if (optsize)
- memcpy(optcopy, options, optsize);
+ syslog(LOG_DEBUG, MODPREFIX "options: '%s'", options);
- argc = smb_parse_options(optcopy, NULL, NULL, &qbuflen) + 4;
+ argc = 6;
argv = alloca(sizeof(char *) * argc);
- qbuf = alloca(qbuflen);
- if ( !argv || (qbuflen && !qbuf) ) {
- syslog(LOG_ERR, MODPREFIX "alloca: %m");
- return 1;
- }
argv[0] = PATH_SMBMOUNT;
argv[1] = what;
argv[2] = fullpath;
- if (optsize)
- memcpy(optcopy, options, optsize);
- smb_parse_options(optcopy, argv+3, qbuf, NULL);
+ argv[3] = "-o";
+ argv[4] = options;
+ argv[5] = NULL;
+
+ for (i = 0; i < argc; i++)
+ {
+ syslog(LOG_DEBUG, MODPREFIX "argv[%d]: '%s'", i, argv[i]);
+ }
syslog(LOG_DEBUG, MODPREFIX "calling mkdir %s", fullpath);
if ( mkdir(fullpath, 0555) && errno != EEXIST ) {