}
Gtk_LdapServer::Gtk_LdapServer(My_Window *w, char *h, int p) : Gtk_TreeItem() {
+ char *s, *s2;
this->par = w;
this->hostname = h;
this->port = p;
- cout << this->hostname << this->port << endl;
+ this->notebook = NULL;
+ debug("%s %i\n", this->hostname, this->port);
+ this->setType(1);
this->getConfig();
}
}
Gtk_LdapServer::~Gtk_LdapServer() {
- cout << "Bye" << endl;
+ debug("Bye\n");
delete this;
}
void Gtk_LdapServer::setType(int t) {
- cout << "Gtk_LdapServer::setType(" << t << ")" << endl;
+ debug("Gtk_LdapServer::setType(%i)\n", t);
Gtk_Pixmap *xpm_icon;
Gtk_Label *label;
- if (this->getchild() != NULL) {
- xpm_label = new Gtk_HBox(GTK_HBOX(this->getchild()->gtkobj()));
- xpm_label->remove_c(xpm_label->children()->nth_data(0));
- xpm_label->remove_c(xpm_label->children()->nth_data(0));
- }
- else xpm_label = new Gtk_HBox();
- cout << this->hostname << endl;
+ char *c = NULL;
+ if (this->get_child() != NULL) this->remove();
+ xpm_label = new Gtk_HBox();
+ debug(this->hostname);
if (strcasecmp(this->hostname,"localhost") == 0)
- xpm_icon=new Gtk_Pixmap(*xpm_label, local_server);
- else xpm_icon=new Gtk_Pixmap(*xpm_label, remote_server);
+ xpm_icon=new Gtk_Pixmap(local_server);
+ else xpm_icon=new Gtk_Pixmap(remote_server);
+// sprintf(c, "%s:%i", this->hostname, this->port);
+// printf("%s\n", c);
label = new Gtk_Label(this->hostname);
xpm_label->pack_start(*xpm_icon, false, false, 1);
xpm_label->pack_start(*label, false, false, 1);
- if (this->getchild() == NULL) this->add(xpm_label);
- label->show();
- xpm_label->show();
- xpm_icon->show();
+ if (this->get_child() == NULL) this->add(*xpm_label);
+ this->show_all();
}
int Gtk_LdapServer::showDetails() {
- cout << "Gtk_LdapServer::showDetails()" << endl;
- this->getDetails();
- /*
+ debug("Gtk_LdapServer::showDetails()\n");
+ if (this->notebook == NULL) this->getOptions();
if (this->notebook != NULL) {
- if (par->viewport->getchild() != NULL) {
- par->viewport->remove_c(par->viewport->getchild()->gtkobj());
+ debug("Have a notebook here");
+ if (par->viewport2->get_child() != NULL) {
+ debug(" and viewport has children");
+ par->viewport2->remove();
+ debug(" which have been removed\n");
}
- par->viewport->add(this->notebook);
- this->notebook->show();
- par->viewport->show();
- return 0;
+ else debug(" and viewport without children\n");
+ par->viewport2->add(*this->notebook);
}
- else this->getDetails();
- this->showDetails();
- */
+ this->show_all();
+ debug("done\n");
return 0;
}
+int Gtk_LdapServer::getMonitor() {
+ debug("Gtk_LdapServer::getMonitor()\n");
+ int error, entriesCount;
+ LDAPMessage *entry, *result_identifier;
+ BerElement *ber;
+ char *attribute, **t;
+
+ if ((this->ld = ldap_open(this->hostname, this->port)) == NULL) {
+ perror("connection");
+ }
+
+ error = ldap_search_s(this->ld, "cn=monitor", LDAP_SCOPE_BASE, "objectclass=*", NULL, 0, &result_identifier);
+ entriesCount = ldap_count_entries(this->ld, result_identifier);
+ if (entriesCount == 0) {
+ return 0;
+ }
+
+ debug("%i tree(s)\n", entriesCount);
+ for (entry = ldap_first_entry(this->ld, result_identifier); entry != NULL; entry = ldap_next_entry(this->ld, result_identifier)) {
+ for (attribute = ldap_first_attribute(this->ld, entry, &ber); attribute != NULL; attribute = ldap_next_attribute(this->ld, entry, ber)) {
+ debug("Attrib: %s\n", attribute);
+ if (strcasecmp(attribute, "database") == 0) {
+ debug("have database here\n");
+ this->databases = NULL;
+ t = ldap_get_values(this->ld, entry, attribute);
+ for (int i=0; i<ldap_count_values(t); i++) {
+ this->databases = g_list_append(this->databases, strdup(t[i]));
+ }
+ ldap_value_free(t);
+ debug("databases loaded\n");
+ GList *t;
+ for (int i=0;i>g_list_length(this->databases);i++) {
+ t = g_list_nth(this->databases, i);
+ debug("database(%i) %s\n", i, (char*) t->data);
+ }
+ }
+ }
+ debug("entry done\n");
+ }
+ return entriesCount;
+}
+
int Gtk_LdapServer::getConfig() {
- cout << "Gtk_LdapServer::getConfig()" << endl;
+ debug("Gtk_LdapServer::getConfig()\n");
int error, entriesCount;
LDAPMessage *entry, *result_identifier;
BerElement *ber;
return 0;
}
- cout << entriesCount << " entry" << endl;
+// debug("%i tree(s)\n", entriesCount);
for (entry = ldap_first_entry(this->ld, result_identifier); entry != NULL; entry = ldap_next_entry(this->ld, result_identifier)) {
for (attribute = ldap_first_attribute(this->ld, entry, &ber); attribute != NULL; attribute = ldap_next_attribute(this->ld, entry, ber)) {
- cout << "Attrib: " << attribute << endl;
+ debug("Attrib: %s\n", attribute);
if (strcasecmp(attribute, "database") == 0) {
- cout << "have database here" << endl;
- this->databases = new G_List<char>;
+ debug("have database here\n");
+ this->databases = NULL;
t = ldap_get_values(this->ld, entry, attribute);
for (int i=0; i<ldap_count_values(t); i++) {
- this->databases->append(strdup(t[i]));
+ this->databases = g_list_append(this->databases, strdup(t[i]));
}
+ this->databases = g_list_append(this->databases, "ldbm : cn=config");
+ this->databases = g_list_append(this->databases, "ldbm : cn=monitor");
+ this->databases = g_list_append(this->databases, "ldbm : cn=schema");
ldap_value_free(t);
- cout << "databases loaded" << endl;
- for (int i=0; i<this->databases->length(); i++) {
- cout << "database(" << i << ") " << this->databases->nth_data(i) << endl;
+ debug("databases loaded\n");
+ GList *t;
+ for (int i=0;i<g_list_length(this->databases);i++) {
+ t = g_list_nth(this->databases, i);
+ debug("database(%i) %s\n", i, (char*) t->data);
}
}
}
- cout << "entry done" << endl;
+ debug("entry done\n");
}
-// cout << "got " << entriesCount << " entries" << endl;
return entriesCount;
}
-int Gtk_LdapServer::getDetails() {
- cout << "Gtk_LdapServer::getDetails()" << endl;
- Gtk_HBox *hbox;
- Gtk_VBox *vbox;
+#ifndef LDAP_GET_OPT /* a temporary fix for usability with (old) U-MICH api */
+char* Gtk_LdapServer::getOptDescription(int option) {
+ debug("Gtk_LdapServer::getOptDescription(%i) ", option);
+ char *c;
+ switch (option) {
+ case LDAP_OPT_API_INFO: c = "API info"; break;
+ case LDAP_OPT_CLIENT_CONTROLS: c = "Client controls"; break;
+ case LDAP_OPT_DEREF: c = "Dereference"; break;
+ case LDAP_OPT_DESC: c = "Description"; break;
+ case LDAP_OPT_DNS: c = "DNS Lookup"; break;
+ case LDAP_OPT_ERROR_NUMBER: c = "Error number"; break;
+ case LDAP_OPT_ERROR_STRING: c = "Error string"; break;
+ case LDAP_OPT_SIZELIMIT: c = "Size limit"; break;
+ case LDAP_OPT_TIMELIMIT: c = "Time limit"; break;
+ case LDAP_OPT_REFERRALS: c = "Referrals"; break;
+ case LDAP_OPT_RESTART: c = "Started"; break;
+ case LDAP_OPT_PROTOCOL_VERSION: c = "Protocol version"; break;
+ case LDAP_OPT_HOST_NAME: c = "Host name"; break;
+ case LDAP_OPT_SERVER_CONTROLS: c = "Server controls"; break;
+ default: c = "No description"; break;
+ }
+ debug("%s\n", c);
+ return c;
+}
+
+int Gtk_LdapServer::getOptType(int option) {
+ debug("Gtk_LdapServer::getOptType(%i) ", option);
+ /* types:
+ * 0 = int, 1 = string, 2 = boolean,
+ * 3 = range, 4 = LDAPAPIInfo, 5 = unknown
+ */
+ int type;
+ switch(option) {
+ /* ints */
+ case LDAP_OPT_DEREF:
+ case LDAP_OPT_DESC:
+ case LDAP_OPT_ERROR_NUMBER:
+ case LDAP_OPT_PROTOCOL_VERSION: type = 0; break;
+ /* strings */
+ case LDAP_OPT_ERROR_STRING:
+ case LDAP_OPT_HOST_NAME: type = 1; break;
+ /* bools */
+ case LDAP_OPT_REFERRALS:
+ case LDAP_OPT_DNS:
+ case LDAP_OPT_RESTART: type = 2; break;
+ /* range */
+ case LDAP_OPT_SIZELIMIT:
+ case LDAP_OPT_TIMELIMIT: type = 3; break;
+ /* api */
+ case LDAP_OPT_API_INFO: type = 4; break;
+ /* unknowns */
+ case LDAP_OPT_SERVER_CONTROLS:
+ case LDAP_OPT_CLIENT_CONTROLS:
+ default: type = 5; break;
+ }
+ debug("%i\n", type);
+ return type;
+}
+#endif /* LDAP_GET_OPT */
+
+int Gtk_LdapServer::getOptions() {
+ debug("Gtk_LdapServer::getOptions()\n");
+ if (this->notebook != NULL) return 0;
+#ifdef LDAP_GET_OPT /* a temporary fix for usability with (old) U-MICH api */
+ Gtk_Label *label;
+ label = new Gtk_Label("This tool has been compiled with (old) U-MICH API (no LDAP_GET_OPT)\nCompile with the latest -devel (from OpenLDAP cvs tree)\nto get some nice options here");
+ this->notebook = new Gtk_Frame("LDAP Options");
+ this->notebook->add(*label);
+ //label->show();
+ //this->notebook->show();
+ this->notebook->show_all();
+ return 0;
+#else
+ LDAPAPIInfo api;
+ Gtk_HBox *hbox, *mini_hbox;
+ Gtk_VBox *vbox, *mini_vbox;
+ Gtk_Table *table;
Gtk_Label *label;
Gtk_RadioButton *radio1, *radio2;
- char *val;
- int ival;
+ Gtk_HScale *scale;
+ Gtk_Adjustment *adjustment;
+ char *description = NULL, *s_value = NULL;
+// int i_value;
+ string label_string;
+
+ int things[10] = {
+ LDAP_OPT_API_INFO,
+ LDAP_OPT_CLIENT_CONTROLS,
+ // LDAP_OPT_DESC,
+ // LDAP_OPT_DEREF,
+ LDAP_OPT_DNS,
+ // LDAP_OPT_ERROR_NUMBER,
+ // LDAP_OPT_ERROR_STRING,
+ LDAP_OPT_HOST_NAME,
+ LDAP_OPT_PROTOCOL_VERSION,
+ LDAP_OPT_REFERRALS,
+ LDAP_OPT_RESTART,
+ LDAP_OPT_SERVER_CONTROLS,
+ LDAP_OPT_SIZELIMIT,
+ LDAP_OPT_TIMELIMIT
+ };
- if (GTK_TREE_ITEM(this->gtkobj())->subtree == NULL) {
+/* if (GTK_TREE_ITEM(this->gtkobj())->subtree == NULL) {
this->getSubtree();
- }
+ } */
-/*
- cout << "getting ldap options";
- vbox = new Gtk_VBox();
- opt_util = new LdapOpts();
-
- for (int i=0; i<sizeof(things); i++) {
- cout << i << endl;
- hbox = new Gtk_HBox();
- label = new Gtk_Label(LdapOpts->getOption(things[i]);
+// vbox = new Gtk_VBox();
+ table = new Gtk_Table(10, 1, TRUE);
+
+ for (int i=0; i<10; i++) {
+ int i_value;
+ // debug("%i\n", i);
+ hbox = new Gtk_HBox(TRUE, 2);
+ hbox->set_border_width(2);
+ description = this->getOptDescription(things[i]);
+ label = new Gtk_Label(description);
+ label->set_justify(GTK_JUSTIFY_LEFT);
+ label->set_alignment(0, 0);
hbox->pack_start(*label);
label->show();
- int tipus = opt_util->getType(things[i]);
- switch (tipus) {
+ switch (this->getOptType(things[i])) {
case 0:
- ldap_get_option(NULL, things[i], &val);
- label = new Gtk_Label(val);
+ ldap_get_option(this->ld, things[i], &i_value);
+ debug("%s value %d\n", description, i_value);
+ sprintf(s_value, "%d", i_value);
+ label = new Gtk_Label(s_value);
+ label->set_justify(GTK_JUSTIFY_LEFT);
+ label->set_alignment(0, 0);
+ hbox->pack_end(*label);
+ label->show();
break;
case 1:
- ldap_get_option(NULL, numerals[i], &ival);
- sprintf(val, "%i", ival);
- label = new Gtk_Label(val);
+ ldap_get_option(this->ld, things[i], &s_value);
+ label = new Gtk_Label(s_value);
+ label->set_justify(GTK_JUSTIFY_LEFT);
+ label->set_alignment(0, 0);
+ hbox->pack_end(*label);
+ label->show();
break;
case 2:
- ldap_get_option(NULL, booleans[i], &ival);
- sprintf(val, "%s", ival == (int) LDAP_OPT_ON ? "on" : "off");
- label = new Gtk_Label(val);
+ ldap_get_option(this->ld, things[i], &i_value);
+ radio1 = new Gtk_RadioButton("Enabled");
+ radio2 = new Gtk_RadioButton("Disabled");
+ radio2->set_group(radio1->group());
+ if (i_value == 1) radio1->set_active(true);
+ else radio2->set_active(true);
+ mini_hbox = new Gtk_HBox(FALSE, 2);
+ mini_hbox->set_border_width(2);
+ mini_hbox->pack_start(*radio1);
+ //radio1->show();
+ mini_hbox->pack_end(*radio2);
+ //radio2->show();
+ hbox->pack_end(*mini_hbox);
+ //mini_hbox->show();
+ break;
+ case 3:
+ ldap_get_option(this->ld, things[i], &i_value);
+ debug("i_value: %s\n", i_value);
+ adjustment = new Gtk_Adjustment(i_value, 0.0, 20.0, 1.0, 1.0, 0.0);
+ scale = new Gtk_HScale(*adjustment);
+ scale->set_update_policy(GTK_UPDATE_CONTINUOUS);
+ scale->set_value_pos(GTK_POS_TOP);
+ scale->set_digits(0);
+ scale->set_draw_value(true);
+ hbox->pack_end(*scale);
+ //scale->show();
+ break;
+ case 4:
+#ifdef LDAP_API_INFO_VERSION
+ api.ldapai_info_version = LDAP_API_INFO_VERSION;
+#else
+ api.ldapai_info_version = 1;
+#endif
+ if (ldap_get_option(this->ld, things[i], &api) != LDAP_SUCCESS) {
+ perror(this->getOptDescription(things[i]));
+ break;
+ }
+ s_value = api.ldapai_vendor_name;
+ label = new Gtk_Label(s_value);
+ label->set_justify(GTK_JUSTIFY_LEFT);
+ label->set_alignment(0, 0);
+ hbox->pack_end(*label);
+ //label->show();
break;
default:
+ label = new Gtk_Label("Not implemented (yet)");
+ label->set_justify(GTK_JUSTIFY_LEFT);
+ label->set_alignment(0, 0);
+ hbox->pack_end(*label);
+ //label->show();
break;
}
-
- hbox->pack_start(*label);
- label->show();
- vbox->pack_start(*hbox);
+ // hbox->pack_end(*label);
+ // label->show();
+ table->attach(*hbox, 0, 1, i, i+1);
hbox->show();
-
}
-
- vbox->border_width(2);
- this->notebook = new Gtk_Viewport();
- this->notebook->add(*vbox);
- vbox->show();
-*/
- this->setType(1);
+ table->set_border_width(2);
+ this->notebook = new Gtk_Frame("LDAP Options");
+ this->notebook->add(*table);
+ //table->show();
+ this->notebook->show_all();
return 0;
+#endif /* LDAP_GET_OPT */
}
-int Gtk_LdapServer::getSubtree() {
- cout << "Gtk_LdapServer::getSubtree()" << endl;
- Gtk_LdapItem *treeresult;
- Gtk_Tree *tree, *subtree;
+Gtk_Tree* Gtk_LdapServer::getSubtree() {
+ debug("Gtk_LdapServer::getSubtree()\n");
+ Gtk_LdapTree *tree, *subtree;
Gtk_LdapTreeItem *treeitem;
int entries;
- cout << "this->hostname=" << this->hostname << endl;
- cout << "this->port=" << this->port << endl;
-/* if ((this->ld = ldap_open(this->hostname, this->port)) == NULL) {
- perror("connection");
- }
-*/
+ debug("this->hostname=%s\n", this->hostname);
+ debug("this->port=%i", this->port);
char *c;
char *tok;
- int len = this->databases->length();
- cout << "this->databases->length()=" << len << endl;
+ int len = g_list_length(this->databases);
+ debug("this->databases->length()=%i\n", len);
- tree = new Gtk_Tree();
+ tree = new Gtk_LdapTree();
for (int i=0; i<len; i++) {
- tok = strdup(this->databases->nth_data(i));
+ GList *t = g_list_nth(this->databases, i);
+ tok = strdup((char*)t->data);
tok = strtok(tok, ":");
+ // c = strtok(NULL, " ");
c = strtok(NULL, "\0");
- cout << "database " << i << " " << c << endl;
- treeresult = this->par->make_tree(this->par, this->ld, c);
- treeitem = new Gtk_LdapTreeItem(*treeresult->treeitem);
+ debug("database %i %s\n", i, c);
+ treeitem = new Gtk_LdapTreeItem(c, this->par, this->ld);
+ subtree = treeitem->getSubtree(this->ld, 1);
+ debug("inserting %s into %s\n", treeitem->rdn, this->hostname);
tree->append(*treeitem);
- if (treeresult->tree != NULL) {
- subtree = new Gtk_Tree(*treeresult->tree);
- treeitem->set_subtree(*subtree);
- }
+ if (subtree != NULL) treeitem->set_subtree(*subtree);
treeitem->show();
+ // treeitem->setDnd();
// tree->show();
}
- this->set_subtree(*tree);
- cout << "getTree() done" << endl;
- return 0;
+// this->set_subtree(*tree);
+ debug("getSubtree() done\n");
+ return tree;
}
-
+/*
+void Gtk_LdapServer::show_impl() {
+ debug("%s showed\n", this->hostname);
+ BaseClassType *sig=static_cast<BaseClassType *>(get_parent_class());
+ if (!sig->show) return;
+ sig->show(gtkobj());
+// Gtk_c_signals_Item *sig=(Gtk_c_signals_Item *)internal_getsignalbase();
+// sig->show(GTK_WIDGET(gtkobj()));
+}
+*/
void Gtk_LdapServer::select_impl() {
- cout << this->hostname << " selected" << endl;
-// gtk_item_select(GTK_ITEM(GTK_TREE_ITEM(this->gtkobj())));
- Gtk_c_signals_Item *sig=(Gtk_c_signals_Item *)internal_getsignalbase();
- if (!sig->select) return;
- sig->select(GTK_ITEM(gtkobj()));
+ debug("%s selected\n", this->hostname);
+// Gtk_c_signals_Item *sig=(Gtk_c_signals_Item *)internal_getsignalbase();
+// if (!sig->select) return;
this->showDetails();
+// sig->select(GTK_ITEM(gtkobj()));
+ Gtk_TreeItem::select_impl();
}
void Gtk_LdapServer::collapse_impl() {
-// cout << this->dn << " collapsed" << endl;
- Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
- if (!sig->collapse) return;
- sig->collapse(GTK_TREE_ITEM(gtkobj()));
+ debug("%s collapsed\n", this->hostname);
+// Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
+// if (!sig->collapse) return;
+// sig->collapse(GTK_TREE_ITEM(gtkobj()));
// gtk_widget_hide(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
+ Gtk_TreeItem::collapse_impl();
}
void Gtk_LdapServer::expand_impl() {
-// cout << this->dn << " expanded" << endl;
- Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
- if (!sig->expand) return;
- sig->expand(GTK_TREE_ITEM(gtkobj()));
+ debug("%s expanded\n", this->hostname);
+ Gtk_TreeItem::expand_impl();
+// BaseClassType *sig=static_cast<BaseClassType *>(get_parent_class());
+// if (!sig->expand)
+// { return; }
+// sig->expand(gtkobj());
+// Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
+// if (!sig->expand) return;
+// sig->expand(GTK_TREE_ITEM(gtkobj()));
// Gtk_Tree *t;
// t = new Gtk_Tree(GTK_TREE(GTK_TREE_ITEM(this->gtkobj())->subtree));
// bool vis = t->visible();