summaryrefslogtreecommitdiffstats
path: root/eurephiadm
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2009-03-24 23:18:22 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2009-03-24 23:18:22 +0100
commit012e51b7de3b066629353791e43ab6fae88490ef (patch)
tree1bce300f7c47ba151f3c0d5b905502c32dcad0b7 /eurephiadm
parent8ea72c10a67b62cef3482a6c821bef7f842b87a1 (diff)
downloadeurephia-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.c104
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;
}