execute_cmd.c revision 2
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Copyright 1987, 1988, 1989 by Massachusetts Institute of Technology
12054bfce7d1b03f143c8287d83cc15b25ff43cfnd * For copyright info, see copyright.h.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * get_request(tbl, idx)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Function:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Gets the idx'th request from the request table pointed to
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Arguments:
91de656b0815c0aeab4e6fc638e9bb4577aa9513Neil Perrin * tbl (ss_request_table *)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * pointer to request table
fa9e4066f08beec538e775443c5be79dd423fcabahrens * idx (int)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * index into table
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick * (ss_request_entry *)
12054bfce7d1b03f143c8287d83cc15b25ff43cfnd * pointer to request table entry
12054bfce7d1b03f143c8287d83cc15b25ff43cfnd * Has been replaced by a macro.
91de656b0815c0aeab4e6fc638e9bb4577aa9513Neil Perrin/* sigh. saber won't deal with pointer-to-const-struct */
91de656b0815c0aeab4e6fc638e9bb4577aa9513Neil Perrinstatic struct _ss_request_entry * get_request (tbl, idx)
d5285cae913f4e01ffa0e6693a6d8ef1fbea30baGeorge Wilson struct _ss_request_table *tbl1 = (struct _ss_request_table *) tbl;
fa9e4066f08beec538e775443c5be79dd423fcabahrens struct _ss_request_entry *e = (struct _ss_request_entry *) tbl1->requests;
fa9e4066f08beec538e775443c5be79dd423fcabahrens return e + idx;
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define get_request(tbl,idx) ((tbl) -> requests + (idx))
fa9e4066f08beec538e775443c5be79dd423fcabahrens * check_request_table(rqtbl, argc, argv, sci_idx)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Function:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * If the command string in argv[0] is in the request table, execute
fa9e4066f08beec538e775443c5be79dd423fcabahrens * the commands and return error code 0. Otherwise, return error
d5285cae913f4e01ffa0e6693a6d8ef1fbea30baGeorge Wilson * code ss_et_command_not_found.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * rqtbl (ss_request_table *)
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick * pointer to request table
fa9e4066f08beec538e775443c5be79dd423fcabahrens * argc (int)
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick * number of elements in argv[]
fa9e4066f08beec538e775443c5be79dd423fcabahrens * argv (char *[])
fa9e4066f08beec538e775443c5be79dd423fcabahrens * argument string array
fa9e4066f08beec538e775443c5be79dd423fcabahrens * sci_idx (int)
b24ab6762772a3f6a89393947930c7fa61306783Jeff Bonwick * ss-internal index for subsystem control info structure
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Solaris Kerberos:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * zero or SS_ET_COMMAND_ERR if command found,
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ss_et_command_not_found otherwise
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic int check_request_table (rqtbl, argc, argv, sci_idx)
fa9e4066f08beec538e775443c5be79dd423fcabahrens register char const * const * name;
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Solaris Kerberos */
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; (request = get_request(rqtbl, i))->command_names; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Solaris Kerberos */
fa9e4066f08beec538e775443c5be79dd423fcabahrens ret = (request->function)(argc, (const char *const *) argv,
fa9e4066f08beec538e775443c5be79dd423fcabahrens * really_execute_command(sci_idx, argc, argv)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Function:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Fills in the argc, argv values in the subsystem entry and
fa9e4066f08beec538e775443c5be79dd423fcabahrens * call the appropriate routine.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Arguments:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * sci_idx (int)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ss-internal index for subsystem control info structure
fa9e4066f08beec538e775443c5be79dd423fcabahrens * argc (int)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * number of arguments in argument list
fa9e4066f08beec538e775443c5be79dd423fcabahrens * argv (char **[])
fa9e4066f08beec538e775443c5be79dd423fcabahrens * pointer to parsed argument list (may be reallocated
fa9e4066f08beec538e775443c5be79dd423fcabahrens * on abbrev expansion)
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Solaris Kerberos:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Zero if successful, SS_ET_COMMAND_NOT_FOUND if unsucessful,
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ss_et_command_not_found otherwise.
int sci_idx;
int argc;
char **argv[];
int ret;
return (ret);
return(SS_ET_COMMAND_NOT_FOUND);
int sci_idx;
register char *argv[];
register int i, argc;
char **argp;
argc = 0;
argc++;
for (i = 0; i <= argc; i++)
int sci_idx;
char *line_ptr;
char **argv;
line_ptr++;
return SS_ET_ESCAPE_DISABLED;
line_ptr++;
if (argc == 0)
return(ret);