diff options
author | Andrew Tridgell <tridge@samba.org> | 2000-04-19 04:01:16 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2000-04-19 04:01:16 +0000 |
commit | 2c2d95d77d3667eaa9252506a82b9054b0d0e01c (patch) | |
tree | 917217f5a8545a9b5b1f770ccb95f7a4447f261b /source/lib/substitute.c | |
parent | 8a99d824c0e9a43c8a8c81140f8c9005c7e2621a (diff) | |
download | samba-2c2d95d77d3667eaa9252506a82b9054b0d0e01c.tar.gz samba-2c2d95d77d3667eaa9252506a82b9054b0d0e01c.tar.xz samba-2c2d95d77d3667eaa9252506a82b9054b0d0e01c.zip |
- got rid of the "passive" option
- cleaned up the standard_sub_*() calls a lot
Diffstat (limited to 'source/lib/substitute.c')
-rw-r--r-- | source/lib/substitute.c | 124 |
1 files changed, 54 insertions, 70 deletions
diff --git a/source/lib/substitute.c b/source/lib/substitute.c index 8e7b1cfa5a5..e7d620db16a 100644 --- a/source/lib/substitute.c +++ b/source/lib/substitute.c @@ -157,78 +157,43 @@ static char *automount_server(char *user_name) return server_name; } -/******************************************************************* - Substitute strings with useful parameters. - Rewritten by Stefaan A Eeckels <Stefaan.Eeckels@ecc.lu> and - Paul Rippin <pr3245@nopc.eurostat.cec.be>. -********************************************************************/ -void standard_sub_basic(char *str) -{ - char *s, *p; - char pidstr[10]; - struct passwd *pass; - char *username = sam_logon_in_ssb ? samlogon_user : sesssetup_user; - - for (s = str ; s && *s && (p = strchr(s,'%')); s = p ) - { - int l = sizeof(pstring) - (int)(p-str); - - if (l < 0) { - DEBUG(0,("ERROR: string overflow by %d in standard_sub_basic(%.50s)\n", - -l, str)); - - return; - } - - switch (*(p+1)) - { - case 'G' : - { - if ((pass = Get_Pwnam(username,False))!=NULL) { - string_sub(p,"%G",gidtoname(pass->pw_gid),l); - } else { - p += 2; - } - break; - } - case 'N' : string_sub(p,"%N", automount_server(username),l); break; - case 'I' : string_sub(p,"%I", client_addr(),l); break; - case 'L' : string_sub(p,"%L", local_machine,l); break; - case 'M' : string_sub(p,"%M", client_name(),l); break; - case 'R' : string_sub(p,"%R", remote_proto,l); break; - case 'T' : string_sub(p,"%T", timestring(False),l); break; - case 'U' : string_sub(p,"%U", username,l); break; - case 'a' : string_sub(p,"%a", remote_arch,l); break; - case 'd' : - { - slprintf(pidstr,sizeof(pidstr) - 1, "%d",(int)getpid()); - string_sub(p,"%d", pidstr,l); - break; - } - case 'h' : string_sub(p,"%h", myhostname(),l); break; - case 'm' : string_sub(p,"%m", remote_machine,l); break; - case 'v' : string_sub(p,"%v", VERSION,l); break; - case '$' : p += expand_env_var(p,l); break; /* Expand environment variables */ - case '\0': p++; break; /* don't run off end if last character is % */ - default : p+=2; break; - } - } - return; -} - /**************************************************************************** Do some standard substitutions in a string. ****************************************************************************/ - -void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, char *str) +static void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, char *str) { char *p, *s, *home; + fstring pidstr; + struct passwd *pass; for (s=str; (p=strchr(s, '%'));s=p) { int l = sizeof(pstring) - (int)(p-str); - + switch (*(p+1)) { + case 'I' : string_sub(p,"%I", client_addr(),l); break; + case 'L' : string_sub(p,"%L", local_machine,l); break; + case 'M' : string_sub(p,"%M", client_name(),l); break; + case 'R' : string_sub(p,"%R", remote_proto,l); break; + case 'T' : string_sub(p,"%T", timestring(False),l); break; + case 'U' : string_sub(p,"%U", user,l); break; + case 'a' : string_sub(p,"%a", remote_arch,l); break; + case 'd' : + slprintf(pidstr,sizeof(pidstr), "%d",(int)getpid()); + string_sub(p,"%d", pidstr,l); + break; + case 'h' : string_sub(p,"%h", myhostname(),l); break; + case 'm' : string_sub(p,"%m", remote_machine,l); break; + case 'v' : string_sub(p,"%v", VERSION,l); break; + case '$' : p += expand_env_var(p,l); break; /* Expand environment variables */ + 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))) { string_sub(p,"%H",home, l); @@ -236,7 +201,6 @@ void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, c p += 2; } break; - case 'P': string_sub(p,"%P", connectpath, l); break; @@ -270,19 +234,14 @@ void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, c break; } } - - standard_sub_basic(str); } /**************************************************************************** Do some standard substitutions in a string. ****************************************************************************/ -void standard_sub(connection_struct *conn, char *str) +void standard_sub_conn(connection_struct *conn, char *str) { - if (conn==NULL) - standard_sub_advanced(-1, "", "", -1, str); - else - standard_sub_advanced(SNUM(conn), conn->user, conn->connectpath, conn->gid, str); + standard_sub_advanced(SNUM(conn), conn->user, conn->connectpath, conn->gid, str); } /**************************************************************************** @@ -293,3 +252,28 @@ void standard_sub_snum(int snum, char *str) standard_sub_advanced(snum, "", "", -1, str); } + +/******************************************************************* + Substitute strings with useful parameters. +********************************************************************/ +void standard_sub_basic(char *str) +{ + standard_sub_advanced(-1, "", "", -1, str); +} + +/******************************************************************* + Substitute strings with useful parameters. +********************************************************************/ +void standard_sub_vuser(char *str, user_struct *vuser) +{ + standard_sub_advanced(-1, vuser->name, "", -1, str); +} + +/******************************************************************* + Substitute strings with useful parameters. +********************************************************************/ +void standard_sub_vsnum(char *str, user_struct *vuser, int snum) +{ + standard_sub_advanced(snum, vuser->name, "", -1, str); +} + |