The 'passwd chat' script currently has a hard coded 2 second timeout that it uses when waiting for a response. This is too small for us since we propogate the password to a corporate meta-directory via java, soap and ssl (which takes 10 seconds on a clear day).
Is there any performance/usability reason why this timeout has been kept small ?
Attached is a patch for 2.2.7a and HEAD for the parameter 'passwd chat timeout' that allows this timeout to be adjusted. The default value for this parameter is kept at 2 seconds.

Jeff McElroy


Index: source/param/loadparm.c
===================================================================
RCS file: /cvsroot/samba/source/param/loadparm.c,v
retrieving revision 1.475
diff -u -r1.475 loadparm.c
--- source/param/loadparm.c     13 Jan 2003 13:03:24 -0000      1.475
+++ source/param/loadparm.c     22 Jan 2003 17:31:34 -0000
@@ -279,6 +279,7 @@
        int restrict_anonymous;
        int name_cache_timeout;
        param_opt_struct *param_opt;
+       int passwd_chat_timeout;
 }
 global;
 
@@ -1110,6 +1111,7 @@
        {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, 
NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, 
NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
        {"winbind use default domain", P_BOOL, P_GLOBAL, 
&Globals.bWinbindUseDefaultDomain, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
+       {"passwd chat timeout", P_INTEGER, P_GLOBAL, &Globals.passwd_chat_timeout, 
+NULL, NULL, FLAG_BASIC},
 
        {NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0}
 };
@@ -1453,6 +1455,8 @@
        Globals.bUseSpnego = True;
 
        string_set(&Globals.smb_ports, SMB_PORTS);
+
+       Globals.passwd_chat_timeout=2000; /* In milliseconds */
 }
 
 static TALLOC_CTX *lp_talloc;
@@ -1827,6 +1831,7 @@
 FN_GLOBAL_BOOL(lp_hide_local_users, &Globals.bHideLocalUsers)
 FN_GLOBAL_BOOL(lp_algorithmic_rid_base, &Globals.bAlgorithmicRidBase)
 FN_GLOBAL_INTEGER(lp_name_cache_timeout, &Globals.name_cache_timeout)
+FN_GLOBAL_INTEGER(lp_passwd_chat_timeout, &Globals.passwd_chat_timeout)
 
 /* local prototypes */
 
Index: source/smbd/chgpasswd.c
===================================================================
RCS file: /cvsroot/samba/source/smbd/chgpasswd.c,v
retrieving revision 1.100
diff -u -r1.100 chgpasswd.c
--- source/smbd/chgpasswd.c     15 Jan 2003 22:15:07 -0000      1.100
+++ source/smbd/chgpasswd.c     22 Jan 2003 17:31:37 -0000
@@ -245,7 +245,9 @@
                if (strequal(expected, "."))
                        return True;
 
-               timeout = 2000;
+               timeout=lp_passwd_chat_timeout();
+               DEBUG(100, ("expect: passwd_chat_timeout=%d\n", timeout));
+
                nread = 0;
                buffer[nread] = 0;
 
diff -uwrB samba-2.2.7a.dist/source/param/loadparm.c 
samba-2.2.7a/source/param/loadparm.c
--- samba-2.2.7a.dist/source/param/loadparm.c   Tue Dec 10 14:58:15 2002
+++ samba-2.2.7a/source/param/loadparm.c        Tue Jan 21 20:18:53 2003
@@ -286,6 +286,7 @@
        BOOL bUseMmap;
        BOOL bUnixExtensions;
        int name_cache_timeout;
+       int passwd_chat_timeout;
 }
 global;
 
@@ -1118,6 +1119,7 @@
        {"winbind enum users", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumUsers, NULL, 
NULL, 0},
        {"winbind enum groups", P_BOOL, P_GLOBAL, &Globals.bWinbindEnumGroups, NULL, 
NULL, 0},
        {"winbind use default domain", P_BOOL, P_GLOBAL, 
&Globals.bWinbindUseDefaultDomain, NULL, NULL, 0},
+       {"passwd chat timeout", P_INTEGER, P_GLOBAL, &Globals.passwd_chat_timeout, 
+NULL, NULL, FLAG_BASIC},
 
        {NULL, P_BOOL, P_NONE, NULL, NULL, NULL, 0}
 };
@@ -1467,6 +1469,8 @@
         */
 
        interpret_coding_system(KANJI);
+
+       Globals.passwd_chat_timeout=2000;
 }
 
 static TALLOC_CTX *lp_talloc;
@@ -1822,6 +1826,7 @@
 FN_LOCAL_CHAR(lp_magicchar, magic_char)
 FN_GLOBAL_INTEGER(lp_winbind_cache_time, &Globals.winbind_cache_time)
 FN_GLOBAL_BOOL(lp_hide_local_users, &Globals.bHideLocalUsers)
+FN_GLOBAL_INTEGER(lp_passwd_chat_timeout, &Globals.passwd_chat_timeout)
 
 /* local prototypes */
 
diff -uwrB samba-2.2.7a.dist/source/smbd/chgpasswd.c 
samba-2.2.7a/source/smbd/chgpasswd.c
--- samba-2.2.7a.dist/source/smbd/chgpasswd.c   Tue Jan 21 19:32:42 2003
+++ samba-2.2.7a/source/smbd/chgpasswd.c        Tue Jan 21 23:36:13 2003
@@ -239,7 +239,8 @@
                if (strequal(expected, "."))
                        return True;
 
-               timeout = 2000;
+               timeout=lp_passwd_chat_timeout();
+               DEBUG(100, ("expect: passwd_chat_timeout=%d\n", timeout));
                nread = 0;
                buffer[nread] = 0;
 


Reply via email to