diff --git a/src/cmd/ksh93/include/defs.h b/src/cmd/ksh93/include/defs.h index 59d50e1e9b0a..e641d99246d4 100644 --- a/src/cmd/ksh93/include/defs.h +++ b/src/cmd/ksh93/include/defs.h @@ -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 diff --git a/src/cmd/ksh93/sh/init.c b/src/cmd/ksh93/sh/init.c index e99e0f8a12db..99d388e2e312 100644 --- a/src/cmd/ksh93/sh/init.c +++ b/src/cmd/ksh93/sh/init.c @@ -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) { diff --git a/src/cmd/ksh93/sh/main.c b/src/cmd/ksh93/sh/main.c index 6c539e45f9b2..7b6ab42c03dd 100644 --- a/src/cmd/ksh93/sh/main.c +++ b/src/cmd/ksh93/sh/main.c @@ -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);