1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00

Fix for argv for setuid scripts (Solaris patch 115-CR6934836)

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).
This commit is contained in:
Martijn Dekker 2021-01-08 11:28:33 +00:00
parent 3f15067272
commit bae02c39b6
3 changed files with 9 additions and 1 deletions

View file

@ -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

View file

@ -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);
@ -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)
{

View file

@ -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);