April Chin wrote: > From: James Carlson <james.d.carlson at sun.com> > > Roland Mainz writes: > > > BTW: The "real" fix for this problem is to compile the shell scripts - > > > in that case the compiled shell script /usr/bin/sleep will just appear > > > as "just another binary application" in the $ ps -ef # output ... > > > ... the trouble is that the matching kernel module ("shbinexec") was > > > added to OS/Net in B106 and we need some builds before we're able to > > > request a flag day and make the availablity of the kernel module a > > > requirement... ;-/ > > > > I'd guess that the flag day is for BFU and not for the build machines > > themselves: you would need to install at least 106 before BFU-ing any > > higher. > > Isn't the new /bin/shcomp, introduced in build 106, > needed on the build machines to compile the ksh93 script for sleep? > In that case, build 106 would be required for build machines also.
Attached (as "ksh93_integration_cr6793120_sleep_wrong_processname20090120_001.diff.txt") is a patch which should fix the problem. The patch changes the "alias.sh" wrapper into a C program with the same functionality (using libshell (which is ksh93's code as shared library)), having a similar affect as the originally planned use of compiled shell scripts (which can't be currently used since /usr/bin/shcomp was added in B106 (= too early to make it a requirement on the build machines) and because something weired is wrong with the "shbinexec" kernel module (I'll debug that once I have my claws on a SXCE 106 DVD image)). Casper: Can you sponsor this putback ? ---- Bye, Roland -- __ . . __ (o.\ \/ /.o) roland.mainz at nrubsig.org \__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer /O /==\ O\ TEL +49 641 3992797 (;O/ \/ \O;) -------------- next part -------------- Index: src/cmd/ksh/builtins/alias.sh =================================================================== --- src/cmd/ksh/builtins/alias.sh (revision 1374) +++ src/cmd/ksh/builtins/alias.sh (working copy) @@ -1,51 +0,0 @@ -#!/usr/bin/ksh93 - -# -# CDDL HEADER START -# -# The contents of this file are subject to the terms of the -# Common Development and Distribution License (the "License"). -# You may not use this file except in compliance with the License. -# -# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE -# or http://www.opensolaris.org/os/licensing. -# See the License for the specific language governing permissions -# and limitations under the License. -# -# When distributing Covered Code, include this CDDL HEADER in each -# file and include the License file at usr/src/OPENSOLARIS.LICENSE. -# If applicable, add the following below this CDDL HEADER, with the -# fields enclosed by brackets "[]" replaced with your own identifying -# information: Portions Copyright [yyyy] [name of copyright owner] -# -# CDDL HEADER END -# - -# -# Copyright 2008 Sun Microsystems, Inc. All rights reserved. -# Use is subject to license terms. -# - -# Get name of builtin -builtin basename -typeset cmd="$(basename "$0")" - -# If the requested command is not an alias load it explicitly -# to make sure it is not bound to a path (those built-ins which -# are mapped via shell aliases point to commands which are -# "special shell built-ins" which cannot be bound to a specific -# PATH element) - otherwise we may execute the wrong command -# if an executable with the same name sits in a PATH element -# before /usr/bin (e.g. /usr/xpg4/bin/ls would be executed -# before /usr/bin/ls if would look like -# PATH=/usr/xpg4/bin:/usr/bin). -if [[ "${cmd}" != ~(Elr)(alias|unalias|command) ]] && ! alias "${cmd}" >/dev/null 2>&1 ; then - builtin "${cmd}" -fi - -# command is a keyword and needs to be handled separately -if [[ "${cmd}" == "command" ]] ; then - command "$@" -else - "${cmd}" "$@" -fi Index: src/cmd/ksh/builtins/alias.c =================================================================== --- src/cmd/ksh/builtins/alias.c (revision 0) +++ src/cmd/ksh/builtins/alias.c (revision 0) @@ -0,0 +1,101 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * alias.c is a C version of the alias.sh wrapper (which links ksh + * builtins to commands in /usr/bin/, e.g. calling this wrapper as + * /usr/bin/alias will call the ksh "alias" builtin, running it as + * /usr/bin/cut will call the ksh "cut" builtin etc. + */ + +#include <shell.h> +#include <nval.h> +#include <stdio.h> + +/* Builtin script, original derived from alias.sh */ +static const char *script = "\n" +/* Get name of builtin */ +"builtin basename\n" +"typeset cmd=\"$(basename \"$0\")\"\n" +/* + * If the requested command is not an alias load it explicitly + * to make sure it is not bound to a path (those built-ins which + * are mapped via shell aliases point to commands which are + * "special shell built-ins" which cannot be bound to a specific + * PATH element) - otherwise we may execute the wrong command + * if an executable with the same name sits in a PATH element + * before /usr/bin (e.g. /usr/xpg4/bin/ls would be executed + * before /usr/bin/ls if would look like + * PATH=/usr/xpg4/bin:/usr/bin). + */ +"if [[ \"${cmd}\" != ~(Elr)(alias|unalias|command) ]] && " + "! alias \"${cmd}\" >/dev/null 2>&1 ; then\n" +" builtin \"${cmd}\"\n" +"fi\n" +/* command is a keyword and needs to be handled separately */ +"if [[ \"${cmd}\" == \"command\" ]] ; then\n" +" command \"$...@\"\n" +"else\n" +" \"${cmd}\" \"$...@\"\n" +"fi\n" +"exitval=$?"; + +int +main(int argc, char *argv[]) +{ + int i; + Shell_t *shp; + Namval_t *np; + int exitval; + + /* + * Create copy of |argv| array shifted by one position to + * emulate $ /usr/bin/sh <scriptname> <args1> <arg2> ... #. + * First position is set to "/usr/bin/sh" since other + * values may trigger special shell modes (e.g. *rsh* will + * trigger "restricted" shell mode etc.). + */ + char *xargv[argc+2]; + xargv[0] = "/usr/bin/sh"; + xargv[1] = "scriptname"; + for (i = 0; i < argc; i++) { + xargv[i+1] = argv[i]; + } + xargv[i+1] = NULL; + + shp = sh_init(argc+1, xargv, 0); + if (!shp) + error(ERROR_exit(1), "shell initialisation failed."); + (void) sh_trap(script, 0); + + np = nv_open("exitval", shp->var_tree, 0); + if (!np) + error(ERROR_exit(1), "variable %s not found.", "exitval"); + exitval = (int)nv_getnum(np); + nv_close(np); + + return (exitval); +} Index: src/cmd/ksh/builtins/Makefile =================================================================== --- src/cmd/ksh/builtins/Makefile (revision 1374) +++ src/cmd/ksh/builtins/Makefile (working copy) @@ -20,7 +20,7 @@ # # -# Copyright 2008 Sun Microsystems, Inc. All rights reserved. +# Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # @@ -63,14 +63,40 @@ $(ROOTBIN)/%: $(ROOTBIN)/alias $(INS.link) -# In the future we should replace the "cat" with a call to -# "shcomp" to compile the script (for better performance). -$(PROG): alias.sh - cat "alias.sh" >"$@" +include ../../Makefile.cmd -install: all $(ROOTALIASPROG) +.KEEP_STATE: +# Set common AST build flags (e.g., needed to support the math stuff). +include ../../../Makefile.ast + +OBJECTS= \ + alias.o + +SRCS= $(OBJECTS:%.o=%.c) + +GROUP= bin +LDLIBS += -lshell -last + +CPPFLAGS = \ + $(DTEXTDOM) $(DTS_ERRNO) \ + -I$(ROOT)/usr/include/ast + +CFLAGS += \ + $(ASTCFLAGS) +CFLAGS64 += \ + $(ASTCFLAGS64) + +ROOTCMDDIR=$(ROOT)/usr/bin + +install: all $(ROOTCMD) + +$(PROG): $(OBJECTS) + $(RM) alias + $(LINK.c) $(OBJECTS) -o $@ $(LDLIBS) + $(POST_PROCESS) + clean clobber: - rm -f $(PROG) + rm -f $(PROG) $(OBJECTS) -lint: +lint _msg: