Skip to content

Commit

Permalink
Fix for argv for setuid scripts (Solaris patch 115-CR6934836)
Browse files Browse the repository at this point in the history
This change is pulled from here:
https://github.com/oracle/solaris-userland/blob/master/components/ksh93/patches/115-CR6934836.patch

Unfortunately there is no publicly available documentation on what
this does or why it was needed. We just have to assume the Solaris
people knew what they were doing. ksh2020 upstreamed this too (as
well as all the other Solaris patches applied here).
  • Loading branch information
McDutchie committed Jan 8, 2021
1 parent 3f15067 commit bae02c3
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/cmd/ksh93/include/defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ struct sh_scoped
char **otrapcom;
void *timetrap;
struct Ufunction *real_fun; /* current 'function name' function */
int repl_index;
char *repl_arg;
};

struct limits
Expand Down
6 changes: 5 additions & 1 deletion src/cmd/ksh93/sh/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1339,6 +1339,7 @@ Shell_t *sh_init(register int argc,register char *argv[], Shinit_f userinit)
sh_onoption(SH_MULTILINE);
if(argc>0)
{
int dolv_index;
/* check for restricted shell */
if(type&SH_TYPE_RESTRICTED)
sh_onoption(SH_RESTRICTED);
Expand All @@ -1355,7 +1356,10 @@ Shell_t *sh_init(register int argc,register char *argv[], Shinit_f userinit)
sh_done(shp,0);
}
opt_info.disc = 0;
shp->st.dolv=argv+(argc-1)-shp->st.dolc;
dolv_index = (argc - 1) - shp->st.dolc;
shp->st.dolv = argv + dolv_index;
shp->st.repl_index = dolv_index;
shp->st.repl_arg = argv[dolv_index];
shp->st.dolv[0] = argv[0];
if(shp->st.dolc < 1)
{
Expand Down
2 changes: 2 additions & 0 deletions src/cmd/ksh93/sh/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,8 @@ int sh_main(int ac, char *av[], Shinit_f userinit)
* try to undo effect of solaris 2.5+
* change for argv for setuid scripts
*/
if(shp->st.repl_index > 0)
av[shp->st.repl_index] = shp->st.repl_arg;
if(((type = sh_type(cp = av[0])) & SH_TYPE_SH) && (name = nv_getval(L_ARGNOD)) && (!((type = sh_type(cp = name)) & SH_TYPE_SH)))
{
av[0] = (type & SH_TYPE_LOGIN) ? cp : path_basename(cp);
Expand Down

0 comments on commit bae02c3

Please sign in to comment.