diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2009-03-24 23:18:22 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2009-03-24 23:18:22 +0100 |
commit | 012e51b7de3b066629353791e43ab6fae88490ef (patch) | |
tree | 1bce300f7c47ba151f3c0d5b905502c32dcad0b7 /eurephiadm | |
parent | 8ea72c10a67b62cef3482a6c821bef7f842b87a1 (diff) | |
download | eurephia-012e51b7de3b066629353791e43ab6fae88490ef.tar.gz eurephia-012e51b7de3b066629353791e43ab6fae88490ef.tar.xz eurephia-012e51b7de3b066629353791e43ab6fae88490ef.zip |
eurephiadm/useraccess: Added grant and revoke functions
Diffstat (limited to 'eurephiadm')
-rw-r--r-- | eurephiadm/commands/useraccess.c | 104 |
1 files changed, 97 insertions, 7 deletions
diff --git a/eurephiadm/commands/useraccess.c b/eurephiadm/commands/useraccess.c index 80a6663..d4529d6 100644 --- a/eurephiadm/commands/useraccess.c +++ b/eurephiadm/commands/useraccess.c @@ -30,7 +30,7 @@ #include <libxml/xpath.h> #endif -#define MODULE "eurephia::UserCerts" +#define MODULE "eurephia::AdminAccess" #include <eurephia_nullsafe.h> #include <eurephia_context.h> #include <eurephia_log.h> @@ -62,7 +62,6 @@ void display_useraccess_help(int page) { printf("The revoke mode will remove the access from the desired user accounts.\n" "\n" " -i | --uid User accound ID\n" - " -u | --username User name\n" " -I | --interface Grant access through which interface (default 'C')\n" " -a | --access-level Grant access which access level\n" "\n" @@ -212,7 +211,99 @@ int list_useraccess(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg int grant_revoke(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { - return 0; + xmlDoc *upd_xml = NULL; + xmlNode *root_n = NULL, *fmap_n = NULL; + char actmode = '-', *actmode_str = NULL; + int i = 0, rc = 0; + int f_uid = 0, f_acl = 0, f_intf = 0; + + e_options addargs[] = { + {"--uid", "-i", 1}, + {"--access-level", "-a", 1}, + {"--interface", "-I", 1}, + {"--help", "-h", 0}, + {NULL, NULL, 0} + }; + + assert( (ctx != NULL) && (ctx->dbc != NULL) && (ctx->dbc->config != NULL)); + + eurephiaXML_CreateDoc(ctx, 1, "edit_admin_access", &upd_xml, &root_n); + fmap_n = xmlNewChild(root_n, NULL, (xmlChar *) "fieldMapping", NULL); + xmlNewProp(fmap_n, (xmlChar *) "table", (xmlChar *) "eurephia_adminaccess"); + + if( (strcmp(argv[0], "--grant") == 0) || (strcmp(argv[0], "-G") == 0) ) { + actmode = 'G'; + actmode_str = "granted"; + xmlNewProp(root_n, (xmlChar *) "mode", (xmlChar *) "grant"); + } else if( (strcmp(argv[0], "--revoke") == 0) || (strcmp(argv[0], "-R") == 0) ) { + actmode = 'R'; + actmode_str = "revoked"; + xmlNewProp(root_n, (xmlChar *) "mode", (xmlChar *) "revoke"); + } + + for( i = 1; i < argc; i++ ) { + switch( eurephia_getopt(&i, argc, argv, addargs) ) { + case 'i': + if( f_uid > 0 ) { + fprintf(stderr, "%s: User id can only be set once\n", MODULE); + return 1; + } + if( atoi_nullsafe(optargs[0]) < 1 ) { + fprintf(stderr, "%s: User ID must be a positive number (>0)\n", MODULE); + return 1; + } + f_uid++; + xmlNewChild(fmap_n, NULL, (xmlChar *) "uid", (xmlChar *) optargs[0]); + break; + + case 'a': + if( f_acl > 0 ) { + fprintf(stderr, "%s: Access level can only be set once\n", MODULE); + return 1; + } + f_acl++; + xmlNewChild(fmap_n, NULL, (xmlChar *) "accesslevel", (xmlChar *) optargs[0]); + break; + + case 'I': + if( f_intf > 0 ) { + fprintf(stderr, "%s: Access level can only be set once\n", MODULE); + return 1; + } + f_intf++; + xmlNewChild(fmap_n, NULL, (xmlChar *) "interface", (xmlChar *) optargs[0]); + break; + + case 'h': + display_useraccess_help(actmode); + return 0; + + default: + return 1; + } + } + + if( (f_uid != 1) || (f_acl != 1) ) { + fprintf(stderr, "%s: You must provide both a user ID (--uid) " + "and an access level (--access-level)\n", + MODULE); + return 1; + } + + if( f_intf == 0 ) { + xmlNewChild(fmap_n, NULL, (xmlChar *) "interface", (xmlChar *) "C"); + } + + if( eDBadminEditAdminAccess(ctx, upd_xml) < 1 ) { + fprintf(stderr, "%s: Failed to update the access level\n", MODULE); + rc = 1; + } else { + printf("%s: Access level %s\n", MODULE, actmode_str); + printf("\n"); + rc = 0; + } + xmlFreeDoc(upd_xml); + return rc; } int cmd_UserAccess(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { @@ -222,8 +313,8 @@ int cmd_UserAccess(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, e_options modeargs[] = { {"--list", "-l", 0}, - {"--add", "-A", 0}, - {"--delete", "-D", 0}, + {"--grant", "-G", 0}, + {"--revoke", "-R", 0}, {"--help", "-h", 0}, {NULL, NULL, 0} }; @@ -240,7 +331,6 @@ int cmd_UserAccess(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, mode_fnc = help_UserAccess2; break; - /* case 'G': mode_fnc = grant_revoke; break; @@ -248,7 +338,7 @@ int cmd_UserAccess(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, case 'R': mode_fnc = grant_revoke; break; - */ + default: break; } |