Changeset 536
- Timestamp:
- 02/19/07 14:39:27 (2 years ago)
- Files:
-
- trunk/src/vcd/methods/vg/vg_add.c (modified) (1 diff)
- trunk/src/vcd/methods/vg/vg_list.c (modified) (1 diff)
- trunk/src/vcd/methods/vg/vg_remove.c (modified) (1 diff)
- trunk/src/vcd/methods/vg/vg_vx_add.c (modified) (3 diffs)
- trunk/src/vcd/methods/vg/vg_vx_list.c (modified) (3 diffs)
- trunk/src/vcd/methods/vg/vg_vx_remove.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/vcd/methods/vg/vg_add.c
r534 r536 44 44 "invalid groupname value: %s", group); 45 45 46 if (str_equal(group, "default")) 47 method_return_faultf(env, MEINVAL, 48 "reserved groupname: %s", group); 46 if (str_equal(group, "all")) 47 return xmlrpc_nil_new(env); 49 48 50 49 rc = vxdb_prepare(&dbr, trunk/src/vcd/methods/vg/vg_list.c
r534 r536 40 40 response = xmlrpc_array_new(env); 41 41 42 /* add virtual default group */43 xmlrpc_array_append_item(env, response, xmlrpc_build_value(env,44 "{s:s,s:i}",45 "groupname", "default",46 "gid", 0));47 48 42 vxdb_foreach_step(rc, dbr) 49 43 xmlrpc_array_append_item(env, response, xmlrpc_build_value(env, trunk/src/vcd/methods/vg/vg_remove.c
r534 r536 44 44 "invalid groupname value: %s", group); 45 45 46 if (str_equal(group, " default"))46 if (str_equal(group, "all")) 47 47 method_return_faultf(env, MEINVAL, 48 " reserved groupname: %s", group);48 "cannot remove from reserved group '%s'", group); 49 49 50 gid = vxdb_getgid(group); 50 if (!(gid = vxdb_getgid(group))) 51 method_return_fault(env, MENOVG); 51 52 52 if (gid != 0) { 53 rc = vxdb_exec( 54 "BEGIN TRANSACTION;" 55 "DELETE FROM xid_gid_map WHERE gid = %d;" 56 "DELETE FROM groups WHERE gid = %d;" 57 "COMMIT TRANSACTION;", 58 gid, gid); 53 rc = vxdb_exec( 54 "BEGIN EXCLUSIVE TRANSACTION;" 55 "DELETE FROM xid_gid_map WHERE gid = %d;" 56 "DELETE FROM groups WHERE gid = %d;" 57 "COMMIT TRANSACTION;", 58 gid, gid); 59 59 60 if (rc != VXDB_OK) 61 method_return_vxdb_fault(env); 62 } 63 64 else 65 method_return_faultf(env, MEINVAL, 66 "group doesn't exist: %s", group); 60 if (rc != VXDB_OK) 61 method_return_vxdb_fault(env); 67 62 68 63 return xmlrpc_nil_new(env); trunk/src/vcd/methods/vg/vg_vx_add.c
r534 r536 29 29 30 30 xmlrpc_value *params; 31 char *group, * vserver;31 char *group, *name; 32 32 int rc, gid, xid; 33 33 … … 38 38 "{s:s,s:s,*}", 39 39 "groupname", &group, 40 " vsname", &vserver);40 "name", &name); 41 41 method_return_if_fault(env); 42 42 … … 45 45 "invalid groupname value: %s", group); 46 46 47 if (!validate_name( vserver))47 if (!validate_name(name)) 48 48 method_return_faultf(env, MEINVAL, 49 "invalid vsname value: %s", vserver);49 "invalid name value: %s", name); 50 50 51 if (str_equal(group, " default"))51 if (str_equal(group, "all")) 52 52 return xmlrpc_nil_new(env); 53 53 54 gid = vxdb_getgid(group); 54 if (!(xid = vxdb_getxid(name))) 55 method_return_fault(env, MENOVPS); 55 56 56 xid = vxdb_getxid(vserver); 57 if (!(gid = vxdb_getgid(group))) 58 method_return_fault(env, MENOVG); 57 59 58 if (gid != 0 && xid != 0) { 59 rc = vxdb_exec( 60 "INSERT INTO xid_gid_map (xid, gid) " 61 "VALUES (%d, %d)", 62 xid, gid); 60 rc = vxdb_exec( 61 "INSERT INTO xid_gid_map (xid, gid) " 62 "VALUES (%d, %d)", 63 xid, gid); 63 64 64 if (rc != VXDB_OK) 65 method_return_vxdb_fault(env); 66 } 67 68 else 69 method_return_faultf(env, MEINVAL, 70 "group or vserver don't exist: %s / %s", group, vserver); 65 if (rc != VXDB_OK) 66 method_return_vxdb_fault(env); 71 67 72 68 return xmlrpc_nil_new(env); trunk/src/vcd/methods/vg/vg_vx_list.c
r534 r536 21 21 #include "vxdb.h" 22 22 23 #include <lucid/list.h>24 23 #include <lucid/log.h> 25 #include <lucid/mem.h>26 24 #include <lucid/str.h> 27 25 … … 30 28 LOG_TRACEME 31 29 32 typedef struct { 33 list_t list; 34 xid_t xid; 35 } xid_list_t; 36 37 xmlrpc_value *params, *response = NULL; 38 char *group, *vsname; 30 xmlrpc_value *params, *response; 31 char *group; 39 32 int rc, gid; 40 xid_list_t _xids, *xids = &_xids, *st;41 list_t *pos;42 33 43 34 params = method_init(env, p, c, VCD_CAP_AUTH, 0); … … 53 44 "invalid groupname value: %s", group); 54 45 55 if (str_equal(group, " default")) {56 rc = vxdb_prepare(&dbr,57 " SELECT xid FROM xid_name_map ORDER BY xid DESC");46 if (str_equal(group, "all")) 47 method_return_faultf(env, MEINVAL, 48 "cannot list group '%s', use vxdb.list instead", group); 58 49 59 if (rc != VXDB_OK) 60 method_return_vxdb_fault(env); 61 } 50 if (!(gid = vxdb_getgid(group))) 51 method_return_fault(env, MENOVG); 62 52 63 else { 64 gid = vxdb_getgid(group); 53 rc = vxdb_prepare(&dbr, 54 "SELECT xid_name_map.name FROM xid_name_map " 55 "INNER JOIN xid_gid_map " 56 "ON xid_name_map.xid = xid_gid_map.xid " 57 "WHERE xid_gid_map.gid = %d " 58 "ORDER BY xid ASC", 59 gid); 65 60 66 if (gid != 0) { 67 rc = vxdb_prepare(&dbr, 68 "SELECT xid FROM xid_gid_map WHERE gid = %d ORDER BY xid DESC", 69 gid); 70 71 if (rc != VXDB_OK) 72 method_return_vxdb_fault(env); 73 } 74 75 else 76 method_return_faultf(env, MEINVAL, 77 "group doesn't exist: %s", group); 78 } 79 80 INIT_LIST_HEAD(&(xids->list)); 81 82 vxdb_foreach_step(rc, dbr) { 83 xid_list_t *new = mem_alloc(sizeof(xid_list_t)); 84 new->xid = vxdb_column_int(dbr, 0); 85 list_add(&(new->list), &(xids->list)); 86 } 87 88 if (rc != VXDB_DONE) 61 if (rc != VXDB_OK) 89 62 method_return_vxdb_fault(env); 90 91 vxdb_finalize(dbr);92 63 93 64 response = xmlrpc_array_new(env); 94 65 95 list_for_each(pos, &(xids->list)) { 96 st = list_entry(pos, xid_list_t, list); 97 98 vsname = vxdb_getname(st->xid); 99 66 vxdb_foreach_step(rc, dbr) 100 67 xmlrpc_array_append_item(env, response, xmlrpc_build_value(env, 101 "{s:s,s:i}", 102 "vsname", vsname, 103 "xid", st->xid)); 104 } 68 "s", vxdb_column_text(dbr, 0))); 105 69 106 70 return response; trunk/src/vcd/methods/vg/vg_vx_remove.c
r534 r536 29 29 30 30 xmlrpc_value *params; 31 char *group, * vserver;31 char *group, *name; 32 32 int rc, gid, xid; 33 33 … … 38 38 "{s:s,s:s,*}", 39 39 "groupname", &group, 40 " vsname", &vserver);40 "name", &name); 41 41 method_return_if_fault(env); 42 42 … … 45 45 "invalid groupname value: %s", group); 46 46 47 if (!validate_name( vserver))47 if (!validate_name(name)) 48 48 method_return_faultf(env, MEINVAL, 49 "invalid vsname value: %s", vserver);49 "invalid name value: %s", name); 50 50 51 if (str_equal(group, " default"))51 if (str_equal(group, "all")) 52 52 method_return_faultf(env, MEINVAL, 53 "cannot remove vservers from group: %s", group);53 "cannot remove from reserved group '%s'", group); 54 54 55 gid = vxdb_getgid(group); 55 if (!(gid = vxdb_getgid(group))) 56 method_return_fault(env, MENOVG); 56 57 57 xid = vxdb_getxid(vserver); 58 if (!(xid = vxdb_getxid(name))) 59 method_return_fault(env, MENOVPS); 58 60 59 if (gid != 0 && xid != 0) { 60 rc = vxdb_exec( 61 "DELETE FROM xid_gid_map WHERE xid = %d AND gid = %d", 62 xid, gid); 61 rc = vxdb_exec( 62 "DELETE FROM xid_gid_map WHERE xid = %d AND gid = %d", 63 xid, gid); 63 64 64 if (rc != VXDB_OK) 65 method_return_vxdb_fault(env); 66 } 67 68 else 69 method_return_faultf(env, MEINVAL, 70 "group or vserver don't exist: %s / %s", group, vserver); 65 if (rc != VXDB_OK) 66 method_return_vxdb_fault(env); 71 67 72 68 return xmlrpc_nil_new(env);
