From 612682354fa978d7b883028b3aace52a2882adca Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 19 Apr 2000 04:01:16 +0000 Subject: [PATCH] - got rid of the "passive" option - cleaned up the standard_sub_*() calls a lot (This used to be commit 2c2d95d77d3667eaa9252506a82b9054b0d0e01c) --- source3/include/proto.h | 16 ++++- source3/lib/substitute.c | 124 +++++++++++++++++---------------------- source3/lib/util_sock.c | 7 --- source3/smbd/ipc.c | 14 ++--- source3/smbd/server.c | 10 +--- source3/smbd/service.c | 10 ++-- 6 files changed, 80 insertions(+), 101 deletions(-) diff --git a/source3/include/proto.h b/source3/include/proto.h index 9d1c158ceff..84320739151 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -197,10 +197,11 @@ int smbrun(char *cmd,char *outfile,BOOL shared); /*The following definitions come from lib/substitute.c */ -void standard_sub_basic(char *str); -void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, char *str); -void standard_sub(connection_struct *conn, char *str); +void standard_sub_conn(connection_struct *conn, char *str); void standard_sub_snum(int snum, char *str); +void standard_sub_basic(char *str); +void standard_sub_vuser(char *str, user_struct *vuser); +void standard_sub_vsnum(char *str, user_struct *vuser, int snum); /*The following definitions come from lib/system.c */ @@ -567,6 +568,15 @@ smb_ucs2_t *string_truncate_w(smb_ucs2_t *s, size_t length); int cli_set_port(struct cli_state *cli, int port); char *cli_errstr(struct cli_state *cli); +void cli_safe_smb_errstr(struct cli_state *cli, char *msg, size_t len); +BOOL get_safe_rap_errstr(int rap_error, char *err_msg, size_t msglen); +void cli_safe_errstr(struct cli_state *cli, char *err_msg, size_t msglen); +BOOL cli_send_trans(struct cli_state *cli, int trans, + char *name, int pipe_name_len, + int fid, int flags, + uint16 *setup, int lsetup, int msetup, + char *param, int lparam, int mparam, + char *data, int ldata, int mdata); BOOL cli_api_pipe(struct cli_state *cli, char *pipe_name, int pipe_name_len, uint16 *setup, uint32 setup_count, uint32 max_setup_count, char *params, uint32 param_count, uint32 max_param_count, diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c index 8e7b1cfa5a5..e7d620db16a 100644 --- a/source3/lib/substitute.c +++ b/source3/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 and - Paul Rippin . -********************************************************************/ -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); +} + diff --git a/source3/lib/util_sock.c b/source3/lib/util_sock.c index 33c6e91709c..bb62442bebb 100644 --- a/source3/lib/util_sock.c +++ b/source3/lib/util_sock.c @@ -30,8 +30,6 @@ extern int sslFd; extern int DEBUGLEVEL; -BOOL passive = False; - /* the last IP received from */ struct in_addr lastip; @@ -538,8 +536,6 @@ ssize_t write_socket(int fd,char *buf,size_t len) { ssize_t ret=0; - if (passive) - return(len); DEBUG(6,("write_socket(%d,%d)\n",fd,(int)len)); ret = write_socket_data(fd,buf,len); @@ -752,9 +748,6 @@ BOOL send_one_packet(char *buf,int len,struct in_addr ip,int port,int type) int out_fd; struct sockaddr_in sock_out; - if (passive) - return(True); - /* create a socket to write to */ out_fd = socket(AF_INET, type, 0); if (out_fd == -1) diff --git a/source3/smbd/ipc.c b/source3/smbd/ipc.c index 17aa83b72b4..64ec05b0176 100644 --- a/source3/smbd/ipc.c +++ b/source3/smbd/ipc.c @@ -80,7 +80,7 @@ static int CopyExpanded(connection_struct *conn, StrnCpy(buf,src,sizeof(buf)/2); pstring_sub(buf,"%S",lp_servicename(snum)); - standard_sub(conn,buf); + standard_sub_conn(conn,buf); StrnCpy(*dst,buf,*n); l = strlen(*dst) + 1; (*dst) += l; @@ -105,7 +105,7 @@ static int StrlenExpanded(connection_struct *conn, int snum, char* s) if (!s) return(0); StrnCpy(buf,s,sizeof(buf)/2); pstring_sub(buf,"%S",lp_servicename(snum)); - standard_sub(conn,buf); + standard_sub_conn(conn,buf); return strlen(buf) + 1; } @@ -115,7 +115,7 @@ static char* Expand(connection_struct *conn, int snum, char* s) if (!s) return(NULL); StrnCpy(buf,s,sizeof(buf)/2); pstring_sub(buf,"%S",lp_servicename(snum)); - standard_sub(conn,buf); + standard_sub_conn(conn,buf); return &buf[0]; } @@ -2137,7 +2137,7 @@ static BOOL api_RNetServerGetInfo(connection_struct *conn,uint16 vuid, char *par SIVAL(p,6,0); } else { SIVAL(p,6,PTR_DIFF(p2,*rdata)); - standard_sub(conn,comment); + standard_sub_conn(conn,comment); StrnCpy(p2,comment,MAX(mdrcnt - struct_len,0)); p2 = skip_string(p2,1); } @@ -2519,7 +2519,7 @@ static BOOL api_RNetUserGetInfo(connection_struct *conn,uint16 vuid, char *param SSVAL(p,52,0); /* flags */ SIVAL(p,54,PTR_DIFF(p2,*rdata)); /* script_path */ pstrcpy(p2,lp_logon_script()); - standard_sub( conn, p2 ); + standard_sub_conn( conn, p2 ); p2 = skip_string(p2,1); if (uLevel == 2) { @@ -2544,7 +2544,7 @@ static BOOL api_RNetUserGetInfo(connection_struct *conn,uint16 vuid, char *param SSVALS(p,104,-1); /* num_logons */ SIVAL(p,106,PTR_DIFF(p2,*rdata)); /* logon_server */ pstrcpy(p2,"\\\\%L"); - standard_sub_basic(p2); + standard_sub_conn(conn, p2); p2 = skip_string(p2,1); SSVAL(p,110,49); /* country_code */ SSVAL(p,112,860); /* code page */ @@ -2667,7 +2667,7 @@ static BOOL api_WWkstaUserLogon(connection_struct *conn,uint16 vuid, char *param { pstring logon_script; pstrcpy(logon_script,lp_logon_script()); - standard_sub( conn, logon_script ); + standard_sub_conn( conn, logon_script ); PACKS(&desc,"z", logon_script); /* script path */ } /* End of JHT mods */ diff --git a/source3/smbd/server.c b/source3/smbd/server.c index cbcdad157a6..a7baa9e3277 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -512,7 +512,6 @@ static void usage(char *pname) printf("\t-D Become a daemon\n"); printf("\t-a Append to log file (default)\n"); printf("\t-o Overwrite log file, don't append\n"); - printf("\t-P Passive only\n"); printf("\t-h Print usage\n"); printf("\t-? Print usage\n"); printf("\t-V Print version\n"); @@ -548,19 +547,12 @@ static void usage(char *pname) argc--; } - while ( EOF != (opt = getopt(argc, argv, "O:l:s:d:Dp:h?VPaof:")) ) + while ( EOF != (opt = getopt(argc, argv, "O:l:s:d:Dp:h?Vaof:")) ) switch (opt) { case 'O': pstrcpy(user_socket_options,optarg); break; - case 'P': - { - extern BOOL passive; - passive = True; - } - break; - case 's': pstrcpy(servicesf,optarg); break; diff --git a/source3/smbd/service.c b/source3/smbd/service.c index 24ba79906b2..b7942906dff 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -488,7 +488,7 @@ connection_struct *make_connection(char *service,char *user,char *password, int { pstring s; pstrcpy(s,lp_pathname(snum)); - standard_sub(conn,s); + standard_sub_conn(conn,s); string_set(&conn->connectpath,s); DEBUG(3,("Connect path is %s\n",s)); } @@ -523,7 +523,7 @@ connection_struct *make_connection(char *service,char *user,char *password, int if (*lp_rootpreexec(SNUM(conn))) { pstring cmd; pstrcpy(cmd,lp_rootpreexec(SNUM(conn))); - standard_sub(conn,cmd); + standard_sub_conn(conn,cmd); DEBUG(5,("cmd=%s\n",cmd)); ret = smbrun(cmd,NULL,False); if (ret != 0 && lp_rootpreexec_close(SNUM(conn))) { @@ -584,7 +584,7 @@ connection_struct *make_connection(char *service,char *user,char *password, int if (*lp_preexec(SNUM(conn))) { pstring cmd; pstrcpy(cmd,lp_preexec(SNUM(conn))); - standard_sub(conn,cmd); + standard_sub_conn(conn,cmd); ret = smbrun(cmd,NULL,False); if (ret != 0 && lp_preexec_close(SNUM(conn))) { DEBUG(1,("preexec gave %d - failing connection\n", ret)); @@ -680,7 +680,7 @@ void close_cnum(connection_struct *conn, uint16 vuid) become_user(conn, vuid)) { pstring cmd; pstrcpy(cmd,lp_postexec(SNUM(conn))); - standard_sub(conn,cmd); + standard_sub_conn(conn,cmd); smbrun(cmd,NULL,False); unbecome_user(); } @@ -690,7 +690,7 @@ void close_cnum(connection_struct *conn, uint16 vuid) if (*lp_rootpostexec(SNUM(conn))) { pstring cmd; pstrcpy(cmd,lp_rootpostexec(SNUM(conn))); - standard_sub(conn,cmd); + standard_sub_conn(conn,cmd); smbrun(cmd,NULL,False); } -- 2.34.1