int main(int argc, char *argv[]) { confdb_handle_t handle; int result; hdb_handle_t cluster_handle; const char *clusterroot = "cluster"; char basedn[1024]; if (argc == 1) { fprintf(stderr, "usage: \n"); fprintf(stderr, " %s <dn> [<objdb root>]\n", argv[0]); fprintf(stderr, "\n"); fprintf(stderr, " eg: \n"); fprintf(stderr, " %s dc=mycompany,dc=com\n", argv[0]); fprintf(stderr, " %s dc=mycompany,dc=com rhcluster\n", argv[0]); fprintf(stderr, "\n"); fprintf(stderr, "objdb root defaults to 'cluster'\n"); fprintf(stderr, "\n"); return 0; } if (argc > 2) { clusterroot = argv[2]; } result = confdb_initialize (&handle, &callbacks); if (result != CS_OK) { printf ("Could not initialize Cluster Configuration Database API instance error %d\n", result); exit (1); } /* Find the starting object ... this should be a param */ result = confdb_object_find_start(handle, OBJECT_PARENT_HANDLE); if (result != CS_OK) { printf ("Could not start object_find %d\n", result); exit (1); } result = confdb_object_find(handle, OBJECT_PARENT_HANDLE, clusterroot, strlen(clusterroot), &cluster_handle); if (result != CS_OK) { printf ("Could not object_find \"cluster\": %d\n", result); exit (1); } sprintf(basedn, "name=%s,%s", clusterroot, argv[1]); /* Print a header */ printf("# This file was generated by confdb2ldif, from an existing cluster configuration\n"); printf("#\n"); /* Print the configuration */ print_config_tree(handle, cluster_handle, clusterroot, basedn); result = confdb_finalize (handle); return (0); }
static void read_object(confdb_handle_t handle, char * name_pt) { char parent_name[OBJ_NAME_SIZE]; hdb_handle_t obj_handle; cs_error_t res; get_parent_name(name_pt, parent_name); res = find_object (handle, name_pt, FIND_OBJECT_OR_KEY, &obj_handle); if (res == CS_OK) { print_config_tree(handle, obj_handle, parent_name); } }
/* Recursively dump the object tree */ static void print_config_tree(confdb_handle_t handle, hdb_handle_t parent_object_handle, int depth) { hdb_handle_t object_handle; char object_name[1024]; size_t object_name_len; char key_name[1024]; size_t key_name_len; char key_value[1024]; size_t key_value_len; int res; int i; /* Show the keys */ res = confdb_key_iter_start(handle, parent_object_handle); if (res != CS_OK) { printf( "error resetting key iterator for object "HDB_X_FORMAT": %d\n", parent_object_handle, res); return; } while ( (res = confdb_key_iter(handle, parent_object_handle, key_name, &key_name_len, key_value, &key_value_len)) == CS_OK) { key_name[key_name_len] = '\0'; key_value[key_value_len] = '\0'; for (i=0; i<depth; i++) printf(" "); printf(" KEY %s=%s\n", key_name, key_value); } /* Show sub-objects */ res = confdb_object_iter_start(handle, parent_object_handle); if (res != CS_OK) { printf( "error resetting object iterator for object "HDB_X_FORMAT": %d\n", parent_object_handle, res); return; } while ( (res = confdb_object_iter(handle, parent_object_handle, &object_handle, object_name, &object_name_len)) == CS_OK) { hdb_handle_t parent; res = confdb_object_parent_get(handle, object_handle, &parent); if (res != CS_OK) { printf( "error getting parent for object "HDB_X_FORMAT": %d\n", object_handle, res); return; } for (i=0; i<depth; i++) printf(" "); object_name[object_name_len] = '\0'; printf("OBJECT: %s ("HDB_X_FORMAT", parent: "HDB_X_FORMAT")\n", object_name, object_handle, parent); /* Down we go ... */ print_config_tree(handle, object_handle, depth+1); } }
static int print_all(void) { confdb_handle_t handle; int result; result = confdb_initialize (&handle, &callbacks); if (result != CS_OK) { fprintf (stderr, "Could not initialize objdb library. Error %d\n", result); return 1; } print_config_tree(handle, OBJECT_PARENT_HANDLE, NULL); result = confdb_finalize (handle); return 0; }
int main (int argc, char *argv[]) { confdb_handle_t handle; int result; hdb_handle_t totem_handle; char key_value[256]; size_t value_len; result = confdb_initialize (&handle, &callbacks); if (result != CS_OK) { printf ("Could not initialize Cluster Configuration Database API instance error %d\n", result); exit (1); } if (argv[1] && strcmp(argv[1], "write")==0) do_write_tests(handle); if (argv[1] && strcmp(argv[1], "reload")==0) { /* Test reload interface */ result = confdb_reload(handle, 0, key_value, sizeof key_value); printf ("Try to reload the config (noflush): %d (should be 1)\n", result); result = confdb_reload(handle, 1, key_value, sizeof key_value); printf ("Try to reload the config (flush): %d (should be 1)\n", result); } /* Test iterators */ print_config_tree(handle, OBJECT_PARENT_HANDLE, 0); /* Find "totem" and dump bits of it again, to test the direct APIs */ result = confdb_object_find_start(handle, OBJECT_PARENT_HANDLE); if (result != CS_OK) { printf ("Could not start object_find %d\n", result); exit (1); } result = confdb_object_find(handle, OBJECT_PARENT_HANDLE, "totem", strlen("totem"), &totem_handle); if (result != CS_OK) { printf ("Could not object_find \"totem\": %d\n", result); exit (1); } result = confdb_key_get(handle, totem_handle, "version", strlen("version"), key_value, &value_len); if (result != CS_OK) { printf ("Could not get \"version\" key: %d\n", result); exit (1); } key_value[value_len] = '\0'; printf("totem/version = '%s'\n", key_value); result = confdb_key_get(handle, totem_handle, "secauth", strlen("secauth"), key_value, &value_len); if (result != CS_OK) { printf ("Could not get \"secauth\" key: %d\n", result); exit (1); } key_value[value_len] = '\0'; printf("totem/secauth = '%s'\n", key_value); /* Try a call that fails */ result = confdb_key_get(handle, totem_handle, "grot", strlen("grot"), key_value, &value_len); printf ("Get \"grot\" key returned: %d (should fail)\n", result); result = confdb_finalize (handle); printf ("Finalize result is %d (should be 1)\n", result); return (0); }
static void do_write_tests(confdb_handle_t handle) { int res; unsigned int incdec_value; hdb_handle_t object_handle; char error_string[1024]; /* Add a scratch object and put some keys into it */ res = confdb_object_create(handle, OBJECT_PARENT_HANDLE, "testconfdb", strlen("testconfdb"), &object_handle); if (res != CS_OK) { printf( "error creating 'testconfdb' object: %d\n", res); return; } res = confdb_key_create(handle, object_handle, "testkey", strlen("testkey"), "one", strlen("one")); if (res != CS_OK) { printf( "error creating 'testconfdb' key 1: %d\n", res); return; } res = confdb_key_create(handle, object_handle, "testkey", strlen("testkey"), "two", strlen("two")); if (res != CS_OK) { printf( "error creating 'testconfdb' key 2: %d\n", res); return; } res = confdb_key_create(handle, object_handle, "grot", strlen("grot"), "perrins", strlen("perrins")); if (res != CS_OK) { printf( "error creating 'testconfdb' key 3: %d\n", res); return; } res = confdb_key_replace(handle, object_handle, "testkey", strlen("testkey"), "two", strlen("two"), "newtwo", strlen("newtwo")); if (res != CS_OK) { printf( "error replace 'testconfdb' key 2: %d\n", res); return; } /* Print it for verification */ print_config_tree(handle, object_handle, 0); incdec_value = INCDEC_VALUE; res = confdb_key_create(handle, object_handle, "incdec", strlen("incdec"), &incdec_value, sizeof(incdec_value)); if (res != CS_OK) { printf( "error creating 'testconfdb' key 4: %d\n", res); return; } res = confdb_key_increment(handle, object_handle, "incdec", strlen("incdec"), &incdec_value); if (res != CS_OK) { printf( "error incrementing 'testconfdb' key 4: %d\n", res); return; } if (incdec_value == INCDEC_VALUE+1) printf("incremented value = %d\n", incdec_value); else printf("ERROR: incremented value = %d (should be %d)\n", incdec_value, INCDEC_VALUE+1); res = confdb_key_decrement(handle, object_handle, "incdec", strlen("incdec"), &incdec_value); if (res != CS_OK) { printf( "error decrementing 'testconfdb' key 4: %d\n", res); return; } if (incdec_value == INCDEC_VALUE) printf("decremented value = %d\n", incdec_value); else printf("ERROR: decremented value = %d (should be %d)\n", incdec_value, INCDEC_VALUE); printf("-------------------------\n"); /* Remove it. Check that it doesn't exist when the full tree dump runs next */ res = confdb_object_destroy(handle, object_handle); if (res != CS_OK) { printf( "error destroying 'testconfdb' object: %d\n", res); return; } res = confdb_write(handle, error_string, sizeof error_string); printf("confdb_write returned %d: %s\n", res, error_string); }
/* Recursively dump the object tree */ static void print_config_tree(confdb_handle_t handle, hdb_handle_t parent_object_handle, char * parent_name) { hdb_handle_t object_handle; char object_name[OBJ_NAME_SIZE]; size_t object_name_len; char key_name[OBJ_NAME_SIZE]; char key_value[OBJ_NAME_SIZE]; size_t key_value_len; cs_error_t res; int children_printed; confdb_value_types_t type; /* Show the keys */ res = confdb_key_iter_start(handle, parent_object_handle); if (res != CS_OK) { fprintf(stderr, "error resetting key iterator for object "HDB_X_FORMAT" %d\n", parent_object_handle, res); exit(EXIT_FAILURE); } children_printed = 0; while ( (res = confdb_key_iter_typed(handle, parent_object_handle, key_name, key_value, &key_value_len, &type)) == CS_OK) { key_value[key_value_len] = '\0'; if (parent_name != NULL) printf("%s%c", parent_name, SEPERATOR); print_key(key_name, key_value, key_value_len, type); children_printed++; } /* Show sub-objects */ res = confdb_object_iter_start(handle, parent_object_handle); if (res != CS_OK) { fprintf(stderr, "error resetting object iterator for object "HDB_X_FORMAT" %d\n", parent_object_handle, res); exit(EXIT_FAILURE); } while ( (res = confdb_object_iter(handle, parent_object_handle, &object_handle, object_name, &object_name_len)) == CS_OK) { object_name[object_name_len] = '\0'; if (parent_name != NULL) { snprintf(key_value, OBJ_NAME_SIZE, "%s%c%s", parent_name, SEPERATOR, object_name); } else { if ((action == ACTION_PRINT_DEFAULT) && strcmp(object_name, "internal_configuration") == 0) continue; snprintf(key_value, OBJ_NAME_SIZE, "%s", object_name); } print_config_tree(handle, object_handle, key_value); children_printed++; } if (children_printed == 0 && parent_name != NULL) { printf("%s\n", parent_name); } }
/* Recursively dump the object tree */ static void print_config_tree(confdb_handle_t handle, hdb_handle_t parent_object_handle, const char *dn, char *fulldn) { hdb_handle_t object_handle; char object_name[1024]; size_t object_name_len; char key_name[1024]; char *key_value=NULL; confdb_value_types_t type; size_t key_value_len; char cumulative_dn[4096]; int res; int keycount=0; printf("\ndn: %s\n", fulldn); /* Show the keys */ res = confdb_key_iter_start(handle, parent_object_handle); if (res != CS_OK) { printf( "error resetting key iterator for object "HDB_X_FORMAT": %d\n", parent_object_handle, res); return; } while ( (res = confdb_key_iter_typed2(handle, parent_object_handle, key_name, (void**)&key_value, &key_value_len, &type)) == CS_OK) { key_value[key_value_len] = '\0'; printf("%s: %s\n", ldap_attr_name(key_name), key_value); keycount++; free(key_value); key_value=NULL; } if (strncmp(fulldn, "cn=", 3) == 0) { printf("cn: %s\n", dn); } /* Determine objectclass... */ if (keycount == 0) { printf("objectclass: nsContainer\n"); } else { printf("objectclass: %s\n", ldap_attr_name(dn)); } /* Show sub-objects */ res = confdb_object_iter_start(handle, parent_object_handle); if (res != CS_OK) { printf( "error resetting object iterator for object "HDB_X_FORMAT": %d\n", parent_object_handle, res); return; } while ( (res = confdb_object_iter(handle, parent_object_handle, &object_handle, object_name, &object_name_len)) == CS_OK) { hdb_handle_t parent; res = confdb_object_parent_get(handle, object_handle, &parent); if (res != CS_OK) { printf( "error getting parent for object "HDB_X_FORMAT": %d\n", object_handle, res); return; } object_name[object_name_len] = '\0'; /* Check for "name", and create dummy parent object */ res = confdb_key_get_typed2(handle, object_handle, "name", (void **)&key_value, &key_value_len, &type); if (res == CS_OK) { sprintf(cumulative_dn, "cn=%s,%s", object_name, fulldn); printf("\n"); printf("dn: %s\n", cumulative_dn); printf("cn: %s\n", object_name); printf("objectclass: %s\n", "nsContainer"); snprintf(cumulative_dn, sizeof(cumulative_dn) - 1, "name=%s,cn=%s,%s", key_value, object_name, fulldn); free(key_value); key_value = NULL; } else { sprintf(cumulative_dn, "cn=%s,%s", object_name, fulldn); } /* Down we go ... */ print_config_tree(handle, object_handle, object_name, cumulative_dn); } }