1 #include "Gtk_LdapServer.h"
2 #include <gtk--/base.h>
4 Gtk_LdapServer::Gtk_LdapServer() : Gtk_TreeItem() {
11 Gtk_LdapServer::Gtk_LdapServer(My_Window *w, char *h, int p) : Gtk_TreeItem() {
15 cout << this->hostname << this->port << endl;
19 Gtk_LdapServer::Gtk_LdapServer(GtkTreeItem *t) : Gtk_TreeItem(t) {
22 Gtk_LdapServer::~Gtk_LdapServer() {
23 cout << "Bye" << endl;
27 void Gtk_LdapServer::setType(int t) {
28 cout << "Gtk_LdapServer::setType(" << t << ")" << endl;
31 if (this->getchild() != NULL) {
32 xpm_label = new Gtk_HBox(GTK_HBOX(this->getchild()->gtkobj()));
33 xpm_label->remove_c(xpm_label->children()->nth_data(0));
34 xpm_label->remove_c(xpm_label->children()->nth_data(0));
36 else xpm_label = new Gtk_HBox();
37 cout << this->hostname << endl;
38 if (strcasecmp(this->hostname,"localhost") == 0)
39 xpm_icon=new Gtk_Pixmap(*xpm_label, local_server);
40 else xpm_icon=new Gtk_Pixmap(*xpm_label, remote_server);
41 label = new Gtk_Label(this->hostname);
42 xpm_label->pack_start(*xpm_icon, false, false, 1);
43 xpm_label->pack_start(*label, false, false, 1);
44 if (this->getchild() == NULL) this->add(xpm_label);
50 int Gtk_LdapServer::showDetails() {
51 cout << "Gtk_LdapServer::showDetails()" << endl;
54 if (this->notebook != NULL) {
55 if (par->viewport->getchild() != NULL) {
56 par->viewport->remove_c(par->viewport->getchild()->gtkobj());
58 par->viewport->add(this->notebook);
59 this->notebook->show();
60 par->viewport->show();
63 else this->getDetails();
69 int Gtk_LdapServer::getConfig() {
70 cout << "Gtk_LdapServer::getConfig()" << endl;
71 int error, entriesCount;
72 LDAPMessage *entry, *result_identifier;
76 if ((this->ld = ldap_open(this->hostname, this->port)) == NULL) {
80 error = ldap_search_s(this->ld, "cn=config", LDAP_SCOPE_BASE, "objectclass=*", NULL, 0, &result_identifier);
81 entriesCount = ldap_count_entries(this->ld, result_identifier);
82 if (entriesCount == 0) {
86 cout << entriesCount << " entry" << endl;
87 for (entry = ldap_first_entry(this->ld, result_identifier); entry != NULL; entry = ldap_next_entry(this->ld, result_identifier)) {
88 for (attribute = ldap_first_attribute(this->ld, entry, &ber); attribute != NULL; attribute = ldap_next_attribute(this->ld, entry, ber)) {
89 cout << "Attrib: " << attribute << endl;
90 if (strcasecmp(attribute, "database") == 0) {
91 cout << "have database here" << endl;
92 this->databases = new G_List<char>;
93 t = ldap_get_values(this->ld, entry, attribute);
94 for (int i=0; i<ldap_count_values(t); i++) {
95 this->databases->append(strdup(t[i]));
98 cout << "databases loaded" << endl;
99 for (int i=0; i<this->databases->length(); i++) {
100 cout << "database(" << i << ") " << this->databases->nth_data(i) << endl;
104 cout << "entry done" << endl;
106 // cout << "got " << entriesCount << " entries" << endl;
110 int Gtk_LdapServer::getDetails() {
111 cout << "Gtk_LdapServer::getDetails()" << endl;
115 Gtk_RadioButton *radio1, *radio2;
119 if (GTK_TREE_ITEM(this->gtkobj())->subtree == NULL) {
124 cout << "getting ldap options";
125 vbox = new Gtk_VBox();
126 opt_util = new LdapOpts();
128 for (int i=0; i<sizeof(things); i++) {
130 hbox = new Gtk_HBox();
131 label = new Gtk_Label(LdapOpts->getOption(things[i]);
132 hbox->pack_start(*label);
134 int tipus = opt_util->getType(things[i]);
137 ldap_get_option(NULL, things[i], &val);
138 label = new Gtk_Label(val);
141 ldap_get_option(NULL, numerals[i], &ival);
142 sprintf(val, "%i", ival);
143 label = new Gtk_Label(val);
146 ldap_get_option(NULL, booleans[i], &ival);
147 sprintf(val, "%s", ival == (int) LDAP_OPT_ON ? "on" : "off");
148 label = new Gtk_Label(val);
154 hbox->pack_start(*label);
156 vbox->pack_start(*hbox);
161 vbox->border_width(2);
162 this->notebook = new Gtk_Viewport();
163 this->notebook->add(*vbox);
170 int Gtk_LdapServer::getSubtree() {
171 cout << "Gtk_LdapServer::getSubtree()" << endl;
172 Gtk_LdapItem *treeresult;
173 Gtk_Tree *tree, *subtree;
174 Gtk_LdapTreeItem *treeitem;
177 cout << "this->hostname=" << this->hostname << endl;
178 cout << "this->port=" << this->port << endl;
179 /* if ((this->ld = ldap_open(this->hostname, this->port)) == NULL) {
180 perror("connection");
187 int len = this->databases->length();
188 cout << "this->databases->length()=" << len << endl;
190 tree = new Gtk_Tree();
191 for (int i=0; i<len; i++) {
192 tok = strdup(this->databases->nth_data(i));
193 tok = strtok(tok, ":");
194 c = strtok(NULL, "\0");
195 cout << "database " << i << " " << c << endl;
196 treeresult = this->par->make_tree(this->par, this->ld, c);
197 treeitem = new Gtk_LdapTreeItem(*treeresult->treeitem);
198 tree->append(*treeitem);
199 if (treeresult->tree != NULL) {
200 subtree = new Gtk_Tree(*treeresult->tree);
201 treeitem->set_subtree(*subtree);
206 this->set_subtree(*tree);
207 cout << "getTree() done" << endl;
211 void Gtk_LdapServer::select_impl() {
212 cout << this->hostname << " selected" << endl;
213 // gtk_item_select(GTK_ITEM(GTK_TREE_ITEM(this->gtkobj())));
214 Gtk_c_signals_Item *sig=(Gtk_c_signals_Item *)internal_getsignalbase();
215 if (!sig->select) return;
216 sig->select(GTK_ITEM(gtkobj()));
220 void Gtk_LdapServer::collapse_impl() {
221 // cout << this->dn << " collapsed" << endl;
222 Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
223 if (!sig->collapse) return;
224 sig->collapse(GTK_TREE_ITEM(gtkobj()));
225 // gtk_widget_hide(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
228 void Gtk_LdapServer::expand_impl() {
229 // cout << this->dn << " expanded" << endl;
230 Gtk_c_signals_TreeItem *sig=(Gtk_c_signals_TreeItem *)internal_getsignalbase();
231 if (!sig->expand) return;
232 sig->expand(GTK_TREE_ITEM(gtkobj()));
234 // t = new Gtk_Tree(GTK_TREE(GTK_TREE_ITEM(this->gtkobj())->subtree));
235 // bool vis = t->visible();
236 // if (vis == false) {
237 // gtk_widget_show(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
238 // cout << this->dn << " expanded" << endl;
241 // gtk_widget_hide(GTK_WIDGET(GTK_TREE(GTK_TREE_ITEM (this->gtkobj())->subtree)));
242 // cout << this->dn << " collapsed" << endl;