Changeset 130

Show
Ignore:
Timestamp:
03/04/06 13:41:40 (3 years ago)
Author:
bonbons
Message:

Removed debugging vflag exeutions

Cleaned up debugging and verbose printfs

Reenabled mntent functions for vmount

Added namespace switching to vnamespace and reordered setting of signal handlers
to get behavior correct if target binary cannot be executed.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.0.4/scripts/lib/vps.sh

    r129 r130  
    102102                setup) 
    103103                        ${_VNCONTEXT} -C -n ${VX_XID} -f PERSISTANT,STATE_SETUP 
    104                         ${_VNFLAGS} -G -m -n ${VX_XID} 
    105104                        ${_VCONTEXT}  -C -x ${VX_XID} -f PERSISTANT,STATE_SETUP 
    106                         ${_VFLAGS} -G -m -x ${VX_XID} 
    107105                        ;; 
    108106                 
     
    129127                                ${_VNCONTEXT} -A -n ${VX_XID} -a ${i} 
    130128                        done 
    131                         ${_VNFLAGS} -G -m -n ${VX_XID} 
    132129                        ;; 
    133130                 
     
    147144                new) 
    148145                        ${_VNAMESPACE} -N -x ${VX_XID} 
    149                         ${_VFLAGS} -G -m -x ${VX_XID} 
    150146                        ;; 
    151147                 
     
    153149                        [ -z "$1" ] && util.error "vps.namespace: missing argument <command>" 
    154150                        ${_VNAMESPACE} -E -x ${VX_XID} -- "$@" 
    155                         ${_VFLAGS} -G -m -x ${VX_XID} 
    156151                        ;; 
    157152                 
     
    239234                                ${_VFLAGS} -S -b $(util.array_to_list ${VX_BCAPS[@]}) -x ${VX_XID} 
    240235                        fi 
    241                         ${_VFLAGS} -G -m -x ${VX_XID} 
    242236                        if [ ! -z "${VX_CCAPS}" ]; then 
    243237                                ${_VFLAGS} -S -c $(util.array_to_list ${VX_CCAPS[@]}) -x ${VX_XID} 
    244238                        fi 
    245                         ${_VFLAGS} -G -m -x ${VX_XID} 
    246239                        if [ ! -z "${VX_FLAGS}" ]; then 
    247240                                ${_VFLAGS} -S -f $(util.array_to_list ${VX_FLAGS[@]}),STATE_SETUP -x ${VX_XID} 
    248241                        fi 
    249                         ${_VFLAGS} -G -m -x ${VX_XID} 
    250242                        ;; 
    251243                 
     
    261253         
    262254        pushd ${VDIR} >/dev/null 
    263         ${_VFLAGS} -G -m -x ${VX_XID} 
    264         ${_VNFLAGS} -G -m -n ${VX_XID} 
    265255        case ${VX_INIT} in 
    266256                sysvinit|init|plain) 
     
    292282                        ;; 
    293283        esac 
    294         ${_VFLAGS} -G -m -x ${VX_XID} 
    295         ${_VNFLAGS} -G -m -n ${VX_XID} 
    296284        popd >/dev/null 
    297285} 
     
    401389                popd >/dev/null 
    402390        fi 
    403         ${_VFLAGS} -G -m -x ${VX_XID} 
    404391        return 0 
    405392} 
     
    420407        ${_VNAMESPACE} -E -x ${VX_XID} -- \ 
    421408        ${_VMOUNT} -U -f ${fstab} -m etc/mtab 
    422         ${_VFLAGS} -G -m -x ${VX_XID} 
    423409        popd >/dev/null 
    424410} 
  • branches/1.0.4/src/tools/vcontext.c

    r129 r130  
    165165                                /* validate descending list */ 
    166166                                if (list_validate_flag(&link, clmod) == -1) 
    167                                         PEXIT("List validation failed", EXIT_USAGE); 
     167                                        PEXIT("List validation failed for FLAGS", EXIT_USAGE); 
    168168                         
    169169                                /* convert given descending list to flags using the pristine copy */ 
     
    197197                                /* validate descending list */ 
    198198                                if (list_validate_flag(&link, clmod) == -1) 
    199                                         PEXIT("List validation failed", EXIT_USAGE); 
     199                                        PEXIT("List validation failed for BCAPS", EXIT_USAGE); 
    200200                                /* convert given descending list to flags using the pristine copy */ 
    201201                                list_list2flags(&link, clmod, &caps.bcaps, &caps.cmask); 
     
    205205                                /* validate descending list */ 
    206206                                if (list_validate_flag(&link, clmod) == -1) 
    207                                         PEXIT("List validation failed", EXIT_USAGE); 
     207                                        PEXIT("List validation failed for CCAPS", EXIT_USAGE); 
    208208                                /* convert given descending list to flags using the pristine copy */ 
    209209                                list_list2flags(&link, clmod, &caps.ccaps, &caps.cmask); 
  • branches/1.0.4/src/tools/vexec.c

    r129 r130  
    169169                                        PEXIT("Failed to set context flags", EXIT_COMMAND); 
    170170                        } 
    171                         vu_printf("Migrating with mflags=%lx\n", mflags.flags); 
     171                        DEBUGF("Migrating with mflags=%lx\n", mflags.flags); 
    172172                        if (vx_migrate(opts.xid, &mflags) == -1) 
    173173                                PEXIT("Failed to migrate to context", EXIT_COMMAND); 
     
    185185                        // -- check for /dev/console or /dev/tty in the guest's root 
    186186                        if (opts.init) { 
    187                                 vu_printf("Preparing for switching stdin to /dev/console...\n"); 
     187                                VPRINTF(&opts, "Preparing for switching stdin to %s...\n", "/dev/console"); 
    188188                                struct stat st; 
    189189                                if (stat("/dev/console", &st) == -1) { 
    190                                         vu_printf("Failed to stat /dev/console:  %s\n", strerror(errno)); 
     190                                        perror("Failed to stat /dev/console"); 
    191191                                } else if (S_ISCHR(st.st_mode)) { 
    192192                                        int fd = open("/dev/console", O_RDWR); // O_NOCTTY); 
     
    197197                                        if (fd > 2) close(fd); 
    198198                                } else 
    199                                         vu_printf("Cannot use /dev/console as it's not a character device.\n"); 
     199                                        vu_dprintf(STDERR_FILENO, "Cannot use /dev/console as it's not a character device.\n"); 
    200200                        } 
    201201 
  • branches/1.0.4/src/tools/vflags.c

    r129 r130  
    210210                        /* syscall */ 
    211211                        if (bmask || caps.cmask) { 
    212                                 VPRINTF(&opts, "BCaps = %x, old  = %x\n", caps.bcaps, obcaps); 
    213                                 VPRINTF(&opts, "CCaps = %x, mask = %x\n", caps.ccaps, caps.cmask); 
     212                                DEBUGF("BCaps = %.16lx, old  = %.16lx\n", caps.bcaps, obcaps); 
     213                                DEBUGF("CCaps = %.16lx, mask = %.16lx\n", caps.ccaps, caps.cmask); 
    214214                                if (vx_set_caps(opts.xid, &caps) == -1) 
    215215                                        PEXIT("Failed to set context capabilities", EXIT_COMMAND); 
     
    244244                                PEXIT("Failed to get context flags", EXIT_COMMAND); 
    245245                         
    246                         VPRINTF(&opts, "Flage = %x, mask = %x\n", flags.flags, flags.mask); 
    247                         VPRINTF(&opts, "BCaps = %x\n", caps.bcaps); 
    248                         VPRINTF(&opts, "CCaps = %x, mask = %x\n", caps.ccaps, caps.cmask); 
     246                        VPRINTF(&opts, "Flage = %.16lx\n", flags.flags); 
     247                        VPRINTF(&opts, "BCaps = %.16lx\n", caps.bcaps); 
     248                        VPRINTF(&opts, "CCaps = %.16lx\n", caps.ccaps); 
    249249                         
    250250                        if (opts.compact) { 
    251251                                bool b = 0; 
    252                                 vu_printf("BCAPS=%lx  CCAPS=%lx  FLAGS=%lx\n", caps.bcaps, caps.ccaps, flags.flags); 
    253                                 vu_printf("BCAPS = "); 
     252                                vu_printf("BCAPS ="); 
    254253                                list_foreach(bp, i) 
    255254                                        if ((caps.bcaps & *(uint64_t*)(bp->node+i)->data) == *(uint64_t*)(bp->node+i)->data) 
    256255                                                vu_printf("%s%s", b++ ? "," : " ", (char *)(bp->node+i)->key); 
    257                                 vu_printf("\nCCAPS = "); 
     256                                vu_printf("\nCCAPS ="); 
    258257                                b = 0; 
    259258                                list_foreach(cp, i) 
    260259                                        if (caps.ccaps & *(uint64_t*)(cp->node+i)->data) 
    261260                                                vu_printf("%s%s", b++ ? "," : " ", (char *)(cp->node+i)->key); 
    262                                 vu_printf("\nFLAGS = "); 
     261                                vu_printf("\nFLAGS ="); 
    263262                                b = 0; 
    264263                                list_foreach(fp, i) 
  • branches/1.0.4/src/tools/vlogin.c

    r129 r130  
    3232#include <sys/wait.h> 
    3333#include <sys/ioctl.h> 
     34#include <limits.h> 
    3435#include <errno.h> 
    3536#include <pty.h> 
     
    4243#define DESCR "Context Login" 
    4344 
    44 #define SHORT_OPTS "n:x:
     45#define SHORT_OPTS "n:x:N
    4546 
    4647struct options { 
     
    4849        nid_t nid; 
    4950        xid_t xid; 
     51        bool namespace; 
    5052}; 
    5153 
     
    7173               "Available options:\n" 
    7274               GLOBAL_HELP 
     75               "    -N            Also change namespace\n" 
    7376               "    -n <xid>      Network Context ID\n" 
    7477               "    -x <xid>      Context ID\n" 
     
    284287                                break; 
    285288                         
     289                        case 'N': 
     290                                opts.namespace = 1; 
     291                                break; 
     292 
    286293                        DEFAULT_GETOPT 
    287294                } 
     
    291298                EXIT("Invalid xid", EXIT_USAGE); 
    292299         
    293         /* TODO: also change namespace? */ 
     300        /* change namespace */ 
     301        if (opts.namespace) { 
     302                char cwd[PATH_MAX]; 
     303                 
     304                if (getcwd(cwd, PATH_MAX) == NULL) 
     305                        PEXIT("Failed to get cwd", EXIT_COMMAND); 
     306                 
     307                if (vx_enter_namespace(opts.xid) == -1) 
     308                        PEXIT("Failed to enter namespace", EXIT_COMMAND); 
     309                 
     310                if (chdir(cwd) == -1) 
     311                        PEXIT("Failed to restore cwd", EXIT_COMMAND); 
     312        } 
    294313         
    295314        /* enter context */ 
     
    318337                PEXIT("Failed to chroot to cwd", EXIT_COMMAND); 
    319338         
    320         pid_t pid; 
    321         pid = fork(); 
    322          
    323         /* setup some signal handlers */ 
    324         signal(SIGINT, signal_handler); 
    325         signal(SIGCHLD, signal_handler); 
    326         signal(SIGWINCH, signal_handler); 
    327          
     339        pid_t pid = fork(); 
     340 
    328341        if (pid == -1) 
    329342                PEXIT("Failed to fork new pseudo terminal", EXIT_COMMAND); 
    330343         
    331344        if (pid == 0) { 
     345                sleep(0); 
     346                 
     347                signal(SIGWINCH, signal_handler); 
     348 
    332349                /* we don't need the master side of the terminal */ 
    333350                close(t.fd); 
     
    348365                /* check shell */ 
    349366                if (argc > optind) { 
     367                        VPRINTF(&opts, "Executing shell '%s'\n", argv[optind]); 
    350368                        if (execv(argv[optind], argv+optind) == -1) { 
    351369                                PEXIT("Failed to execute shell", EXIT_COMMAND); 
    352370                        } 
    353                 } 
    354                 else { 
     371                } else { 
     372                       VPRINTF(&opts, "Executing default shell '%s'\n", "/bin/sh"); 
    355373                        if (execl("/bin/sh", "/bin/sh", "-l", NULL) == -1) { 
    356374                                PEXIT("Failed to execute default shell", EXIT_COMMAND); 
    357375                        } 
    358376                } 
     377        } else { 
     378                /* setup some signal handlers */ 
     379                signal(SIGINT, signal_handler); 
     380                signal(SIGCHLD, signal_handler); 
     381                signal(SIGWINCH, signal_handler); 
    359382        } 
    360383         
  • branches/1.0.4/src/tools/vmount.c

    r129 r130  
    190190struct mntspec *load_fstab(const char *file) 
    191191{ 
    192 /*    FILE *f; 
     192      FILE *f; 
    193193 
    194194        if ((f = setmntent(file ? file : "./etc/fstab", "r"))) 
     
    218218                endmntent(f); 
    219219                return first; 
    220         } */ 
     220        } 
    221221        return NULL; 
    222222} 
  • branches/1.0.4/src/tools/vnamespace.c

    r129 r130  
    3838#include "printf.h" 
    3939#include "tools.h" 
     40#include "sys.h" 
    4041 
    4142#define NAME  "vnamespace" 
  • branches/1.0.4/src/tools/vnflags.c

    r129 r130  
    166166                        if (opts.compact) { 
    167167                                int b = 0; 
    168                                 vu_printf("NCAPS = "); 
     168                                vu_printf("NCAPS ="); 
    169169                                list_foreach(cp, i) 
    170170                                        if (caps.caps & *(uint64_t*)(cp->node+i)->data) 
    171171                                                vu_printf("%s%s", b++ ? "," : " ", (char *)(cp->node+i)->key); 
    172                                 vu_printf("\nFLAGS = "); 
     172                                vu_printf("\nFLAGS ="); 
    173173                                b = 0; 
    174174                                list_foreach(fp, i)