PERFORCE change 99584 for review
Alex Lyashkov
als at FreeBSD.org
Mon Jun 19 06:32:44 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=99584
Change 99584 by als at als_head on 2006/06/19 06:32:33
extend jail stats. reformat soruce to style(9) compatible.
Affected files ...
.. //depot/projects/jail2/j2_tools/jctl/jctl.c#2 edit
Differences ...
==== //depot/projects/jail2/j2_tools/jctl/jctl.c#2 (text+ko) ====
@@ -7,14 +7,17 @@
#include <sys/jail2.h>
#include <sys/jail2_flags.h>
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
#include <unistd.h>
-#include <ctype.h>
-#include <string.h>
-#include <getopt.h>
-#include <err.h>
-#include <errno.h>
+
+
static void usage(void);
@@ -28,244 +31,247 @@
#define C_FLAGS JAIL2_COMMAND(J_COMMON,J_SETFLAGS)
#define C_EXEC 1
-char default_exec[50] = "/bin/csh";
-char csh_login[50]="/bin/csh -l";
-char *login_shell[] = { csh_login, NULL };
+char default_exec[50] = "/bin/csh";
+char csh_login[50] = "/bin/csh -l";
+char *login_shell[] = {csh_login, NULL};
#define J_FLAGS 4
struct flag {
- const char *name;
- uint32_t mask;
+ const char *name;
+ uint32_t mask;
} flags [J_FLAGS] = {
- {"START", J_START_FL},
- {"PROCLIMIT", J_PROCLIMIT_FL},
- {"IPC", J_SYSVIPC_ALLOW_FL },
- {NULL, 0}
+ {"START", J_START_FL},
+ {"PROCLIMIT", J_PROCLIMIT_FL},
+ {"IPC", J_SYSVIPC_ALLOW_FL},
+ {NULL, 0}
};
-static int
+static int
jail_exec(struct jail_2 *j, char *exec, char **arg)
{
- int ret;
-
+ int ret;
+
j->cmd = C_ENTER;
ret = jail(j);
- if( ret != 0 )
+ if (ret != 0)
return ret;
-
- return execvp(exec, arg);
+
+ return execvp(exec, arg);
}
static void
jail_stats_v1(struct jail2_stats_v1 *jst)
{
- uint32_t i;
-
- printf("flags\t\t%x ( ",jst->flags);
- for(i=0;i<J_FLAGS;i++)
- if ((jst->flags & flags[i].mask)!=0)
- printf("%s ", flags[i].name);
- printf(")\n");
- printf("Task count\t%d\n",jst->taskcount);
- printf("CPU limits\t%u:%u\n",jst->cpulow, jst->cpuhigh);
- printf("CPU usage\t%u\n",jst->cpuusage);
- printf("Jail SYSV IPC\n");
- printf("\t\tallocate limit\n");
- printf("Message queue %u %u\n", jst->msq_count, jst->msq_limit);
- printf("Semaphore %u %u\n", jst->sem_count, jst->sem_limit);
- printf("Shared segments %u %u\n", jst->shm_count, jst->shm_limit);
- printf("Jail disk usage\n");
- printf(" ");
+ uint32_t i;
+
+ printf("flags\t\t%x ( ", jst->flags);
+ for (i = 0; i < J_FLAGS; i++)
+ if ((jst->flags & flags[i].mask) != 0)
+ printf("%s ", flags[i].name);
+ printf(")\n");
+ printf("Task count\t%d\n", jst->taskcount);
+ printf("CPU limits\t%u:%u\n", jst->cpulow, jst->cpuhigh);
+ printf("CPU usage\t%u\n", jst->cpuusage);
+ printf("\t\tallocate limit\n");
+ printf("Task count %u \n", jst->taskcount);
+ printf("Message queue %u %u\n", jst->msq_count, jst->msq_limit);
+ printf("Semaphore %u %u\n", jst->sem_count, jst->sem_limit);
+ printf("Shared segments %u %u\n", jst->shm_count, jst->shm_limit);
+ printf("Disk space usage %u %u\n", jst->diskblocks, jst->disklimit);
+ printf("Inode usage %u %u\n", jst->inodecount, jst->inodelimit);
+ printf("filehandle usage %u %u\n", jst->fdcount, jst->fdlimit);
+ printf(" \n");
}
static int
jail_stats(struct jail_2 *j)
{
- struct jail2_stats *jst;
- int ret = 0;
+ struct jail2_stats *jst;
+ int ret = 0;
+
+ jst = malloc(sizeof(struct jail2_stats));
+ if (jst == NULL)
+ return (ENOMEM);
+ j->data = jst;
-
- jst = malloc(sizeof(struct jail2_stats));
- if (jst == NULL)
- return (ENOMEM);
- j->data = jst;
-
- ret = jail(j);
- if (ret != 0)
- goto exit;
+ ret = jail(j);
+ if (ret != 0)
+ goto exit;
- printf("Jail\t\t%d\n",jst->id);
- switch(jst->version) {
- case 1:
- jail_stats_v1(&jst->v1);
- break;
- default:
- ret = ENOTSUP;
- break;
- }
-
+ printf("Jail\t\t%d\n", jst->id);
+ switch (jst->version) {
+ case 1:
+ jail_stats_v1(&jst->v1);
+ break;
+ default:
+ ret = ENOTSUP;
+ break;
+ }
exit:
- free(jst);
- j->data = NULL;
- return ret;
+ free(jst);
+ j->data = NULL;
+ return ret;
}
-enum mask_op { m_nop, m_add, m_clear, m_xor};
+enum mask_op {
+ M_NOP,
+ M_ADD,
+ M_CLEAR,
+ M_XOR
+};
struct m_ops {
- char str;
- enum mask_op op;
+ char str;
+ enum mask_op op;
} mask_ops [4] = {
- {'+', m_add},
- {'-', m_clear},
- {'^', m_xor},
- {'\0',m_nop}
+ {'+', M_ADD},
+ {'-', M_CLEAR},
+ {'^', M_XOR},
+ {'\0', M_NOP}
};
static void
skip_space(char **ostr)
{
- char *str = *ostr;
-
- while(isspace(*str)) {
- if(*str == '\0')
- break;
- str++;
- }
- *ostr = str;
+ char *str = *ostr;
+
+ while (isspace(*str)) {
+ if (*str == '\0')
+ break;
+ str++;
+ }
+ *ostr = str;
}
static int
-parse_flag(char **oflag, uint32_t *omask)
+parse_flag(char **oflag, uint32_t * omask)
{
- uint32_t i;
- int ret = -1;
- enum mask_op op = m_nop;
- char *flag = *oflag;
- char *end_word;
- uint32_t mask = 0;
-
- /* skip space*/
- skip_space(&flag);
- i = 0;
- while(mask_ops[i].str!='\0'){
- if(*flag == mask_ops[i].str) {
- op = mask_ops[i].op;
- break;
+ uint32_t i;
+ int ret = -1;
+ enum mask_op op = M_NOP;
+ char *flag = *oflag;
+ char *end_word;
+ uint32_t mask = 0;
+
+ /* skip space */
+ skip_space(&flag);
+ i = 0;
+ while (mask_ops[i].str != '\0') {
+ if (*flag == mask_ops[i].str) {
+ op = mask_ops[i].op;
+ break;
+ }
+ i++;
+ }
+ flag++;
+ if (op == M_NOP) {
+ ret = EINVAL;
+ goto exit;
+ }
+ skip_space(&flag);
+ end_word = flag;
+ while (!isspace(*end_word)) {
+ if (*end_word == '\0')
+ break;
+ end_word++;
+ }
+ *end_word = '\0';
+
+ for (i = 0; i < J_FLAGS; i++) {
+ if (strncasecmp(flag, flags[i].name, end_word - flag) == 0) {
+ mask = flags[i].mask;
+ break;
+ }
+ }
+ flag = end_word;
+
+ if (mask == 0) {
+ ret = EINVAL;
+ goto exit;
}
- i++;
- }
- flag++;
- if (op == m_nop) {
- ret = EINVAL;
- goto exit;
- }
- skip_space(&flag);
- end_word = flag;
- while(!isspace(*end_word)) {
- if(*end_word == '\0')
- break;
- end_word++;
- }
- *end_word = '\0';
-
- for(i=0;i<J_FLAGS;i++) {
- if (strncasecmp(flag,flags[i].name,end_word - flag) == 0) {
- mask = flags[i].mask;
- break;
+ switch (op) {
+ case M_ADD:
+ *omask |= mask;
+ break;
+ case M_CLEAR:
+ *omask &= ~mask;
+ break;
+ case M_XOR:
+ *omask ^= mask;
+ break;
+ default:
+ ret = EINVAL;
+ break;
}
- }
- flag = end_word;
-
- if (mask == 0) {
- ret = EINVAL;
- goto exit;
- }
-
- switch (op) {
- case m_add:
- *omask |= mask;
- break;
- case m_clear:
- *omask &= ~mask;
- break;
- case m_xor:
- *omask ^= mask;
- break;
- default:
- ret = EINVAL;
- break;
- }
-
+
exit:
- *oflag = flag;
- return ret;
+ *oflag = flag;
+ return ret;
}
static int
jail_flags(struct jail_2 *j, char *cflags)
{
- struct jail2_stats *jst;
- int ret = 0;
- uint32_t oldfl;
-
- j->cmd = C_STAT;
- jst = malloc(sizeof(struct jail2_stats));
- if (jst == NULL)
- return (ENOMEM);
- j->data = jst;
-
- ret = jail(j);
- if (ret != 0)
- goto exit_free;
-
- oldfl = jst->v1.flags;
+ struct jail2_stats *jst;
+ int ret = 0;
+ uint32_t oldfl;
+
+ j->cmd = C_STAT;
+ jst = malloc(sizeof(struct jail2_stats));
+ if (jst == NULL)
+ return (ENOMEM);
+ j->data = jst;
+
+ ret = jail(j);
+ if (ret != 0)
+ goto exit_free;
+
+ oldfl = jst->v1.flags;
+
+ while (*cflags != '\0')
+ parse_flag(&cflags, &oldfl);
- while(*cflags != '\0')
- parse_flag(&cflags,&oldfl);
+ j->cmd = C_FLAGS;
+ j->data = &oldfl;
+ ret = jail(j);
- j->cmd = C_FLAGS;
- j->data = &oldfl;
- ret = jail(j);
-
exit_free:
- free(jst);
- return (ret);
+ free(jst);
+ return (ret);
}
int
main(int argc, char **argv)
{
- int ch;
- char *error;
- struct jail_2 j;
- int ret;
-
- /* options descriptor */
- static struct option longopts[] = {
- { "ctx", required_argument, NULL, C_CTX },
- { "create", no_argument, NULL, C_CREATE },
- { "destroy", no_argument, NULL, C_DESTROY },
- { "start", no_argument, NULL, C_START },
- { "stop", no_argument, NULL, C_STOP },
- { "enter", no_argument, NULL, C_ENTER },
- { "exec", required_argument, NULL, C_EXEC },
- { "stat", no_argument, NULL, C_STAT },
- { "flags", required_argument, NULL, C_FLAGS },
- { NULL, 0, NULL, 0 }
- };
+ int ch;
+ char *error;
+ struct jail_2 j;
+ int ret;
+
+ /* options descriptor */
+ static struct option longopts[] = {
+ {"ctx", required_argument, NULL, C_CTX},
+ {"create", no_argument, NULL, C_CREATE},
+ {"destroy", no_argument, NULL, C_DESTROY},
+ {"start", no_argument, NULL, C_START},
+ {"stop", no_argument, NULL, C_STOP},
+ {"enter", no_argument, NULL, C_ENTER},
+ {"exec", required_argument, NULL, C_EXEC},
+ {"stat", no_argument, NULL, C_STAT},
+ {"flags", required_argument, NULL, C_FLAGS},
+ {NULL, 0, NULL, 0}
+ };
j.version = 2;
j.ctx_id = 0;
j.data = NULL;
j.cmd = 0;
- while ((ch = getopt_long(argc, argv, "", longopts, NULL)) != -1)
- {
- switch( ch ) {
+ while ((ch = getopt_long(argc, argv, "", longopts, NULL)) != -1) {
+ switch (ch) {
case C_CTX:
- j.ctx_id = strtol(optarg,&error,10);
+ j.ctx_id = strtol(optarg, &error, 10);
if (*error != '\0')
- errx(1,"Error in context identifyer");
+ errx(1, "Error in context identifyer");
break;
case C_CREATE:
j.cmd = C_CREATE;
@@ -289,38 +295,38 @@
j.cmd = C_STOP;
ret = jail(&j);
if (ret != 0)
- err(5,"Stop");
+ err(5, "Stop");
break;
case C_ENTER:
ret = jail_exec(&j, default_exec, login_shell);
if (ret != 0)
- err(6,"Enter");
+ err(6, "Enter");
break;
case C_EXEC:
- ret = jail_exec(&j,optarg, argv+(optind-1));
+ ret = jail_exec(&j, optarg, argv + (optind - 1));
if (ret != 0)
- err(7,"Exec");
+ err(7, "Exec");
break;
case C_STAT:
j.cmd = C_STAT;
- if (jail_stats(&j)!=0)
- err(8,"Error get jail stats");
+ if (jail_stats(&j) != 0)
+ err(8, "Error get jail stats");
break;
case C_FLAGS:
- if (jail_flags(&j, optarg)!=0)
- err(8,"Error set jail flags");
+ if (jail_flags(&j, optarg) != 0)
+ err(8, "Error set jail flags");
break;
default:
usage();
- errx(100,"Unknow command");
+ errx(100, "Unknow command");
}
}
- return( 0 );
+ return (EX_OK);
}
static void
usage(void)
{
- exit(1);
+ exit(EX_USAGE);
}
More information about the p4-projects
mailing list