Here is a patch to correct two problems in 2.2.2 * %U and %G could not be used in services names in smb.conf * %G would fail to be expanded in an "include = ..." line This has already been applied to SAMBA_2_2 cvs cheers, jerry --------------------------------------------------------------------- www.samba.org SAMBA Team jerry_at_samba.org www.plainjoe.org jerry_at_plainjoe.org --"I never saved anything for the swim back." Ethan Hawk in Gattaca-- -------------- next part -------------- --- /opt/src/samba-2.2.2/source/lib/substitute.c Thu Jul 5 21:01:34 2001 +++ lib/substitute.c Wed Oct 17 23:45:41 2001 @@ -170,6 +170,7 @@ { char *p, *s; fstring pidstr; + struct passwd *pass; for (s=str; (p=strchr(s, '%'));s=p) { fstring tmp_str; @@ -182,6 +183,13 @@ strlower(tmp_str); string_sub(p,"%U",tmp_str,l); break; + case 'G' : + if ((pass = Get_Pwnam(current_user_info.smb_name, False))!=NULL) { + string_sub(p,"%G",gidtoname(pass->pw_gid),l); + } else { + p += 2; + } + break; case 'D' : fstrcpy(tmp_str, current_user_info.domain); strupper(tmp_str); @@ -218,19 +226,11 @@ void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, char *str) { char *p, *s, *home; - struct passwd *pass; for (s=str; (p=strchr(s, '%'));s=p) { int l = sizeof(pstring) - (int)(p-str); switch (*(p+1)) { - case 'G' : - if ((pass = Get_Pwnam(user,False))!=NULL) { - string_sub(p,"%G",gidtoname(pass->pw_gid),l); - } else { - p += 2; - } - break; case 'N' : string_sub(p,"%N", automount_server(user),l); break; case 'H': if ((home = get_user_home_dir(user))) { --- /opt/src/samba-2.2.2/source/param/loadparm.c Sat Oct 13 16:09:31 2001 +++ param/loadparm.c Wed Oct 17 14:54:16 2001 @@ -73,6 +73,7 @@ extern pstring global_myname; pstring global_scope = ""; + #ifndef GLOBAL_NAME #define GLOBAL_NAME "global" #endif @@ -1792,6 +1793,7 @@ tservice = *pservice; /* it might already exist */ + if (name) { i = getservicebyname(name, NULL); @@ -3430,16 +3432,26 @@ int lp_servicenumber(char *pszServiceName) { int iService; + fstring serviceName; + for (iService = iNumServices - 1; iService >= 0; iService--) - if (VALID(iService) && ServicePtrs[iService]->szService && - strequal(ServicePtrs[iService]->szService, pszServiceName)) - break; + { + if (VALID(iService) && ServicePtrs[iService]->szService) + { + /* + * The substitution here is used to support %U is + * service names + */ + fstrcpy(serviceName, ServicePtrs[iService]->szService); + standard_sub_basic(serviceName); + if (strequal(serviceName, pszServiceName)) + break; + } + } if (iService < 0) - DEBUG(7, - ("lp_servicenumber: couldn't find %s\n", - pszServiceName)); + DEBUG(7,("lp_servicenumber: couldn't find %s\n", pszServiceName)); return (iService); }