Rev 3767 | Rev 3812 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3767 | Rev 3809 | ||
|---|---|---|---|
| Line 70... | Line 70... | ||
| 70 | if (NULL == usr->line) |
70 | if (NULL == usr->line) |
| 71 | return CL_EFAIL; |
71 | return CL_EFAIL; |
| 72 | 72 | ||
| 73 | tmp = cli_strdup(usr->line); |
73 | tmp = cli_strdup(usr->line); |
| 74 | 74 | ||
| 75 | /* Break up what the user typed, space delimited */ |
- | |
| 76 | - | ||
| 77 | /* TODO: Protect things in quotes / ticks, expand wildcards */ |
- | |
| 78 | cmd[n] = cli_strtok(tmp, " "); |
75 | cmd[n] = cli_strtok(tmp, " "); |
| 79 | while (cmd[n] && n < WORD_MAX) { |
76 | while (cmd[n] && n < WORD_MAX) { |
| 80 | cmd[++n] = cli_strtok(NULL, " "); |
77 | cmd[++n] = cli_strtok(NULL, " "); |
| 81 | } |
78 | } |
| 82 | 79 | ||
| Line 84... | Line 81... | ||
| 84 | if (NULL == cmd[0]) { |
81 | if (NULL == cmd[0]) { |
| 85 | rc = CL_ENOENT; |
82 | rc = CL_ENOENT; |
| 86 | goto finit; |
83 | goto finit; |
| 87 | } |
84 | } |
| 88 | 85 | ||
| 89 | /* Its a builtin command */ |
86 | /* Its a builtin command ? */ |
| 90 | if ((i = (is_builtin(cmd[0]))) > -1) { |
87 | if ((i = (is_builtin(cmd[0]))) > -1) { |
| 91 | /* Its not available in this mode, see what try_exec() thinks */ |
- | |
| 92 | if (builtin_is_restricted(i)) { |
- | |
| 93 | rc = try_exec(cmd[0], cmd); |
- | |
| 94 | if (rc) |
- | |
| 95 | /* No external matching it could be found, tell the |
- | |
| 96 | * user that the command does exist, but is not |
- | |
| 97 | * available in this mode. */ |
- | |
| 98 | cli_restricted(cmd[0]); |
- | |
| 99 | goto finit; |
- | |
| 100 | } |
- | |
| 101 | /* Its a builtin, its available, run it */ |
- | |
| 102 | rc = run_builtin(i, cmd, usr); |
88 | rc = run_builtin(i, cmd, usr); |
| 103 | goto finit; |
89 | goto finit; |
| 104 | /* We repeat the same dance for modules */ |
90 | /* Its a module ? */ |
| 105 | } else if ((i = (is_module(cmd[0]))) > -1) { |
91 | } else if ((i = (is_module(cmd[0]))) > -1) { |
| 106 | if (module_is_restricted(i)) { |
- | |
| 107 | rc = try_exec(cmd[0], cmd); |
- | |
| 108 | if (rc) |
- | |
| 109 | cli_restricted(cmd[0]); |
- | |
| 110 | goto finit; |
- | |
| 111 | } |
- | |
| 112 | rc = run_module(i, cmd); |
92 | rc = run_module(i, cmd); |
| 113 | goto finit; |
93 | goto finit; |
| 114 | } else { |
- | |
| 115 | /* Its not a module or builtin, restricted or otherwise. |
- | |
| 116 | * See what try_exec() thinks of it and just pass its return |
- | |
| 117 | * value back to the caller */ |
- | |
| 118 | rc = try_exec(cmd[0], cmd); |
- | |
| 119 | goto finit; |
- | |
| 120 | } |
94 | } |
| 121 | 95 | ||
| - | 96 | /* See what try_exec thinks of it */ |
|
| - | 97 | rc = try_exec(cmd[0], cmd); |
|
| - | 98 | ||
| 122 | finit: |
99 | finit: |
| 123 | if (NULL != usr->line) { |
100 | if (NULL != usr->line) { |
| 124 | free(usr->line); |
101 | free(usr->line); |
| 125 | usr->line = (char *) NULL; |
102 | usr->line = (char *) NULL; |
| 126 | } |
103 | } |