/* Copyright (C) 2000,2001,2002 Manuel Amador (Rudd-O) This file is part of Directory administrator. Directory administrator is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Directory administrator is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Directory administrator; if not, send e-mail to amador@alomega.com */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "callbacks.h" #include "interface.h" #include "support.h" #include "appglobals.h" #include "users.h" #include "groups.h" #include "appfunctions.h" #include "prefsdialog.h" #include "usergrouplists.h" #include "modifydialogs.h" #include "newdruids.h" #include "connect_dialog.h" #include "prefs.h" #include "icon_entry.h" #include "dir_entry.h" #include "charset.h" void on_exit1_activate (GtkMenuItem * menuitem, gpointer user_data) { gtk_main_quit (); } void on_cut1_activate (GtkMenuItem * menuitem, gpointer user_data) { } void on_copy1_activate (GtkMenuItem * menuitem, gpointer user_data) { } void on_paste1_activate (GtkMenuItem * menuitem, gpointer user_data) { } void on_clear1_activate (GtkMenuItem * menuitem, gpointer user_data) { } void on_preferences1_activate (GtkMenuItem * menuitem, gpointer user_data) { gtk_widget_show (create_preferences ()); } void on_about1_activate (GtkMenuItem * menuitem, gpointer user_data) { GnomeAbout*w; GtkWidget*b,*b2; GtkVBox*v; gchar *pixmap1_filename; GtkWidget *pixmap1; w = (GnomeAbout*) create_about (); v = GTK_VBOX(w->dialog.vbox); b = gnome_href_new ("http://diradmin.open-it.org/", "Go to Web site: http://diradmin.open-it.org/"); gtk_widget_ref (b); gtk_object_set_data_full (GTK_OBJECT (w), "b", b, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (b); gtk_container_add(GTK_CONTAINER(v),b); pixmap1 = gtk_type_new (gnome_pixmap_get_type ()); pixmap1_filename = gnome_pixmap_file ("directory_administrator/byruddo.png"); if (pixmap1_filename) gnome_pixmap_load_file (GNOME_PIXMAP (pixmap1), pixmap1_filename); else g_warning ("Couldn't find pixmap file: %s", "byruddo.png"); g_free (pixmap1_filename); gtk_widget_ref (pixmap1); gtk_object_set_data_full (GTK_OBJECT (w), "pixmap1", pixmap1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (pixmap1); gtk_box_pack_start (GTK_BOX (v), pixmap1, TRUE, TRUE, 0); b2 = gnome_href_new ("http://www.usm.edu.ec/~amadorm/", "Open the Rudd-O's zone (Spanish)"); gtk_widget_ref (b2); gtk_object_set_data_full (GTK_OBJECT (w), "b2", b2, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (b2); gtk_container_add(GTK_CONTAINER(v),b2); gtk_widget_show(GTK_WIDGET(w)); } void on_mainwindow_destroy (GtkObject * object, gpointer user_data) { gtk_main_quit (); } void on_button4_clicked (GtkButton * button, gpointer user_data) { if (on_button4_clicked_handler (button, (GtkWidget *) user_data) == TRUE) gtk_widget_destroy (lookup_widget ((GtkWidget *) button, "login")); } void on_login_destroy (GtkObject * object, gpointer user_data) { gtk_object_destroy (object); } void on_login_cancel_button_clicked (GtkButton * button, gpointer user_data) { gtk_widget_destroy (lookup_widget ((GtkWidget *) button, "login")); } void on_button_add_profile_clicked (GtkButton * button, gpointer user_data) { GtkWidget *about = create_druid_new_profile (); gtk_object_set_user_data ((GtkObject *) about, lookup_widget ((GtkWidget *) button, "list_profiles")); /* gtk_signal_connect (GTK_OBJECT (lookup_widget (about, "finish")), "finish", GTK_SIGNAL_FUNC (on_button4_clicked), lookup_widget ((GtkWidget *) button, "list_profiles"));*/ gtk_widget_show (about); } void on_button_connect_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (!app_is_connected() && GTK_TOGGLE_BUTTON (togglebutton)->active) { app_interactive_connect(); } else { app_interactive_disconnect(); } } void on_button_test_connection_clicked (GtkButton * button, gpointer user_data) { GtkWidget *mesg; connection_profile *test; int ldap_errors; char buf[2048]; gchar *nombrecitocojudo; nombrecitocojudo = gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_server")); if (strlen (nombrecitocojudo) == 0) { gtk_widget_show (create_messagebox_with_message ("You need to supply a server")); return; } test = connection_profile_new (gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_profile_name")), gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_dn")), gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_pw")), gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_server")), gtk_toggle_button_get_active ((GtkToggleButton *) lookup_widget ((GtkWidget *) button, "entry_login_tls")), gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_treeroot"))); ldap_errors = connection_profile_connect (test); if (ldap_errors) { g_snprintf (buf, 2048, "Connection failed: %s", ldap_err2string (ldap_errors)); mesg = create_messagebox_with_message ((char *) &buf); } ////THIS IS ONLY DEBUG BEHAVIOR!! REMOVE BEFORE SHIPPING!!!!! else { mesg = create_messagebox_with_message ("The connection was successful"); } gtk_widget_show (mesg); connection_profile_destroy (test); } void on_list_profiles_map (GtkWidget * widget, gpointer user_data) { list_profiles_fill (widget); } void on_button_remove_profile_clicked (GtkButton * button, gpointer user_data) { gint selected_crap = (gint) user_data; gchar *profilename = NULL; connection_profile *conprof = NULL; GtkWidget *profile_list = (GtkWidget *) lookup_widget ((GtkWidget *) button, "list_profiles"); gtk_clist_get_text ((GtkCList *) profile_list, selected_crap, 0, &profilename); //if profilename is null, just return, because it means nothing is selected; if (profilename == NULL) return; // this used to be the handler: g_assert(profilename); conprof = connection_profile_list_getbyname (connection_profile_list, profilename); if (conprof == NULL) { g_print ("***ERROR! could not get data about selected profile"); return; } connection_profile_list = connection_profile_list_remove (connection_profile_list, conprof); gtk_clist_remove ((GtkCList *) lookup_widget ((GtkWidget *) button, "list_profiles"), selected_crap); } void on_button_modify_profile_clicked (GtkButton * button, gpointer user_data) { GtkWidget *about = NULL; gint selected_crap = (gint) user_data; gchar *profilename = NULL; GtkWidget *profile_list = (GtkWidget *) lookup_widget ((GtkWidget *) button, "list_profiles"); gtk_clist_get_text ((GtkCList *) profile_list, selected_crap, 0, &profilename); //if profilename is null, just return, because it means nothing is selected; g_assert (profilename); about = create_login (); fill_login (about, profilename); gtk_signal_connect (GTK_OBJECT (lookup_widget (about, "button4")), "clicked", GTK_SIGNAL_FUNC (on_login_modify_finish), profile_list); gtk_widget_show (about); } void on_list_profiles_select_row (GtkCList * clist, gint row, gint column, GdkEvent * event, gpointer user_data) { GtkWidget *button_remove_profile = lookup_widget ((GtkWidget *) clist, "button_remove_profile"); GtkWidget *button_modify_profile = lookup_widget ((GtkWidget *) clist, "button_modify_profile"); printf ("\nSelected row %d\n", row); gtk_signal_disconnect (GTK_OBJECT (button_remove_profile), preferences_profile_list_signal_reference); gtk_signal_disconnect (GTK_OBJECT (button_modify_profile), preferences_profile_list_signal_reference2); preferences_profile_list_signal_reference = gtk_signal_connect (GTK_OBJECT (button_remove_profile), "clicked", GTK_SIGNAL_FUNC (on_button_remove_profile_clicked), (gpointer) row); preferences_profile_list_signal_reference2 = gtk_signal_connect (GTK_OBJECT (button_modify_profile), "clicked", GTK_SIGNAL_FUNC (on_button_modify_profile_clicked), (gpointer) row); } void on_client_setup1_activate (GtkMenuItem * menuitem, gpointer user_data) { GtkWidget *about = create_druid_client_setup (); gtk_widget_show (about); } void on_enableperserverlogon_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_show (lookup_widget (GTK_WIDGET (togglebutton), "label_serverid")); gtk_widget_show (lookup_widget (GTK_WIDGET (togglebutton), "serverid")); /* If control reaches here, the toggle button is down */ } else { gtk_widget_hide (lookup_widget (GTK_WIDGET (togglebutton), "label_serverid")); gtk_widget_hide (lookup_widget (GTK_WIDGET (togglebutton), "serverid")); /* If control reaches here, the toggle button is up */ } } void on_button_add_shell_clicked (GtkButton * button, gpointer user_data) { } void on_button_up_shell_clicked (GtkButton * button, gpointer user_data) { } void on_button_down_shell_clicked (GtkButton * button, gpointer user_data) { } void on_button_remove_shell_clicked (GtkButton * button, gpointer user_data) { } void on_loginshells_map (GtkWidget * widget, gpointer user_data) { fill_loginshells_list (widget); } void on_loginshells_select_row (GtkCList * clist, gint row, gint column, GdkEvent * event, gpointer user_data) { GtkWidget *button_up_shell = lookup_widget ((GtkWidget *) clist, "button_up_shell"); GtkWidget *button_down_shell = lookup_widget ((GtkWidget *) clist, "button_down_shell"); GtkWidget *button_remove_shell = lookup_widget ((GtkWidget *) clist, "button_remove_shell"); printf ("\nSelected row %d\n", row); gtk_signal_disconnect (GTK_OBJECT (button_up_shell), preferences_loginshells_signal_reference); gtk_signal_disconnect (GTK_OBJECT (button_down_shell), preferences_loginshells_signal_reference2); gtk_signal_disconnect (GTK_OBJECT (button_remove_shell), preferences_loginshells_signal_reference3); preferences_loginshells_signal_reference = gtk_signal_connect (GTK_OBJECT (button_up_shell), "clicked", GTK_SIGNAL_FUNC (on_button_up_shell_clicked), (gpointer) row); preferences_loginshells_signal_reference2 = gtk_signal_connect (GTK_OBJECT (button_down_shell), "clicked", GTK_SIGNAL_FUNC (on_button_down_shell_clicked), (gpointer) row); preferences_loginshells_signal_reference3 = gtk_signal_connect (GTK_OBJECT (button_remove_shell), "clicked", GTK_SIGNAL_FUNC (on_button_remove_shell_clicked), (gpointer) row); } void on_minuid_map (GtkWidget * widget, gpointer user_data) { char buf[256]; g_snprintf (buf, 256, "%d", preferences.logindefaults.VUID_MIN); gtk_entry_set_text (GTK_ENTRY (widget), buf); } void on_mingid_map (GtkWidget * widget, gpointer user_data) { char buf[256]; g_snprintf (buf, 256, "%d", preferences.logindefaults.VGID_MIN); gtk_entry_set_text (GTK_ENTRY (widget), buf); } void on_profileselected_map (GtkWidget * widget, gpointer user_data) { profileselected_fill (widget); } void on_selectprofile_okay_clicked (GtkButton * button, gpointer user_data) { if (!profileselected_commit (GTK_WIDGET (button))) { gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "connect_selectprofile")); } } void on_connect_selectprofile_cancel_clicked (GtkButton * button, gpointer user_data) { gtk_toggle_button_set_active ((GtkToggleButton *) lookup_widget (app, "button_connect"), FALSE); gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "connect_selectprofile")); } void on_cancel_clicked (GtkButton * button, gpointer user_data) { } void on_modifygroup_cancel_clicked (GtkButton * button, gpointer user_data) { gtk_widget_destroy (lookup_widget ((GtkWidget *) button, "modifygroup")); } void on_modifyuser_cancel_clicked (GtkButton * button, gpointer user_data) { gtk_widget_destroy (lookup_widget ((GtkWidget *) button, "modifyuser")); } void on_button_modifyselection_clicked (GtkButton * button, gpointer user_data) { GtkWidget *mainwindow; GnomeIconList *itemlist = NULL; gint pos; dir_entry *entry; // GList* selections; //GList * iter; itemlist = (GnomeIconList *) lookup_widget (GTK_WIDGET (button), "itemlist"); if (itemlist->selection == NULL) return; pos = GPOINTER_TO_INT (itemlist->selection->data); entry = gnome_icon_list_get_icon_data (itemlist, pos); if (entry->type == DENTRY_USER) { mainwindow = create_modifyuser (); gtk_widget_show (mainwindow); fill_modifyuser (mainwindow, dir_entry_get_dn(entry)); } if (entry->type == DENTRY_GROUP) { mainwindow = create_modifygroup (); gtk_widget_show (mainwindow); fill_modifygroup (mainwindow, dir_entry_get_dn(entry)); } } void on_logontoallservers_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_hide (lookup_widget (GTK_WIDGET (togglebutton), "frame_loginservers")); /* If control reaches here, the toggle button is down */ } else { gtk_widget_show (lookup_widget (GTK_WIDGET (togglebutton), "frame_loginservers")); /* If control reaches here, the toggle button is up */ gtk_widget_grab_focus (lookup_widget (GTK_WIDGET (togglebutton), "selectedserver")); } } void on_button_new_clicked (GtkButton * button, gpointer user_data) { GtkWidget *mainwindow = NULL; if (connection_profile_is_connected (current_connection_profile)) { if (!cached_dir_entries_has_ous()) gtk_widget_show(create_messagebox_with_message("Your directory appears empty, or it does not have organizational units.\nPlease initialize your directory with the MigrationTools from PADL.com.")); else if (!cached_dir_entries_has_groups()) gtk_widget_show(create_messagebox_with_message("You cannot create a user until you have created\na group. Please create a group first.")); else { mainwindow = create_druid_new_user (); gtk_widget_show (mainwindow); } } } void on_druid_new_user_druid_cancel (GnomeDruid * gnomedruid, gpointer user_data) { gtk_widget_destroy (lookup_widget ((GtkWidget *) gnomedruid, "druid_new_user")); } void on_button_passwd_clicked (GtkButton * button, gpointer user_data) { gtk_widget_show (lookup_widget (GTK_WIDGET (button), "tablepassword")); gtk_widget_destroy (GTK_WIDGET (button)); } void on_adduser_togroup_clicked (GtkButton * button, gpointer user_data) { GtkCList *memberlist = NULL; GtkWidget *about = create_selectuser (); memberlist = (GtkCList *) lookup_widget (GTK_WIDGET (button), "members"); gtk_object_set_user_data (GTK_OBJECT (about), memberlist); gtk_widget_show (about); } void on_userselected_map (GtkWidget * widget, gpointer user_data) { fill_users_dropdown (widget); } void on_selectuser_okay_clicked (GtkButton * button, gpointer user_data) { GtkCList *memberlist = NULL; GtkCList *parentmemberlist = NULL; GtkWidget *mywindow = NULL; char *row[3]; char *broughtrow; // GList*selectedrows; //GList*loop; gint numrows; gint n; GList*loopix; gint confirmadd = 1; gchar* asciichar; gchar * uid; gchar * thisdn; dir_entry * dentry; gchar * message; row[0] = NULL; row[1] = NULL; row[2] = NULL; g_print("Adding selected members to group member C-list...\n"); mywindow = lookup_widget (GTK_WIDGET (button), "selectuser"); parentmemberlist = (GtkCList *) gtk_object_get_user_data (GTK_OBJECT (mywindow)); memberlist =(GtkCList*)lookup_widget (GTK_WIDGET (button), "members"); for(loopix=memberlist->selection;loopix!=NULL;loopix=loopix->next) { confirmadd = 1; numrows = (gint)loopix->data; thisdn =gtk_clist_get_row_data(memberlist,numrows); dentry = cached_dir_entries_getbydn(thisdn); uid = NULL; if (dentry) uid = dentry->uid; if (uid) { asciichar = convert_to_ascii(uid); if (g_strcasecmp(uid,asciichar) != 0) { message = g_strconcat("The user " , dir_entry_get_cn(dentry), " cannot be added because its user ID has non-ASCII\n", "characters (e.g. accented characters). Please change its user ID and try again.", NULL); gtk_widget_show(create_messagebox_with_message(message)); g_free(message); confirmadd = 0; } g_free(asciichar); } if (confirmadd) { gtk_clist_get_text(memberlist,numrows,0,&broughtrow); g_print(" Text in row: %s\n",broughtrow); row[0] = g_strdup("Secondary"); row[1] = broughtrow; n=gtk_clist_append (parentmemberlist, row); g_print(" DN in row: %s\n",thisdn); gtk_clist_set_row_data(parentmemberlist,n,thisdn); } } gtk_clist_columns_autosize(parentmemberlist); gtk_widget_destroy(mywindow); } void on_selectuser_cancel_clicked (GtkButton * button, gpointer user_data) { gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "selectuser")); } void on_deluser_fromgroup_clicked (GtkButton * button, gpointer user_data) { GtkCList *memberlist = NULL; // GList*loopix; gint mimi; gboolean shown = 0; gchar*celltext; gchar*message; GList*mylist=NULL; memberlist = (GtkCList *) lookup_widget (GTK_WIDGET (button), "members"); if (memberlist->selection) { mylist = memberlist->selection; while (mylist) { gtk_clist_get_text(memberlist,(int)mylist->data,0,&celltext); if (g_strcasecmp(celltext,"Primary") == 0 && shown == 0) { message = g_strconcat ("Primary members cannot be deleted directly from this list.\nYou need to directly change the primary member in the user property page", NULL); shown = 1; gtk_widget_show (create_messagebox_with_message (message)); g_free(message); mylist = mylist->next; } else { mimi = GPOINTER_TO_INT(mylist->data); mylist = mylist->next; g_print("Removing member number %d from the list\n",mimi); gtk_clist_remove (memberlist,mimi); // mylist=g_list_append(mylist, GPOINTER_TO_INT (loopix->data)); } } //actually REMOVE the elements from the list //for(mylist=g_list_last(mylist);mylist;mylist=mylist->prev) { /// g_print("Removing member number %d from the list\n",mylist->data); // gtk_clist_remove (memberlist, GPOINTER_TO_INT (mylist->data)); //} //g_list_free(mylist); gtk_widget_grab_focus(GTK_WIDGET(memberlist)); } } void on_addserver_clicked (GtkButton * button, gpointer user_data) { GtkCList *memberlist = NULL; GtkWidget *mywindow = NULL; GtkEntry* selectedserver; char *row[1]; row[0] = NULL; memberlist = (GtkCList *) lookup_widget (GTK_WIDGET (button), "allowedservers"); selectedserver = GTK_ENTRY (lookup_widget (GTK_WIDGET (button), "selectedserver")); row[0] = gtk_entry_get_text (selectedserver); if (strlen (row[0]) == 0) { mywindow = create_messagebox_with_message ("Please supply a server name"); gtk_widget_show (mywindow); } else { gtk_clist_append (memberlist, row); gtk_entry_set_text (selectedserver, ""); gtk_widget_grab_focus(GTK_WIDGET(selectedserver)); } } void on_delserver_clicked (GtkButton * button, gpointer user_data) { GtkCList *memberlist = NULL; memberlist = (GtkCList *) lookup_widget (GTK_WIDGET (button), "allowedservers"); if (memberlist->selection) { gtk_clist_remove (memberlist, GPOINTER_TO_INT (memberlist->selection->data)); } gtk_widget_grab_focus(GTK_WIDGET(memberlist)); } void on_addserver_okay_clicked (GtkButton * button, gpointer user_data) { GtkCList *memberlist = NULL; GtkWidget *mywindow = NULL; char *row[1]; row[0] = NULL; mywindow = lookup_widget (GTK_WIDGET (button), "addserver"); memberlist = (GtkCList *) gtk_object_get_user_data (GTK_OBJECT (mywindow)); row[0] = gtk_entry_get_text (GTK_ENTRY (lookup_widget (GTK_WIDGET (button), "selectedserver"))); if (strlen (row[0]) == 0) { mywindow = create_messagebox_with_message ("You need to supply a server name"); gtk_widget_show (mywindow); } else { gtk_clist_append (memberlist, row); gtk_widget_destroy (mywindow); } } void on_addserver_cancel_clicked (GtkButton * button, gpointer user_data) { gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "addserver")); } void on_druid_new_profile_druid_cancel (GnomeDruid * gnomedruid, gpointer user_data) { gtk_widget_destroy (lookup_widget ((GtkWidget *) gnomedruid, "druid_new_profile")); } void on_druid_client_setup_druid_cancel (GnomeDruid * gnomedruid, gpointer user_data) { gtk_widget_destroy (lookup_widget ((GtkWidget *) gnomedruid, "druid_client_setup")); } void on_modifyuser_okay_clicked (GtkButton * button, gpointer user_data) { GtkWidget *window = NULL; window = lookup_widget (GTK_WIDGET (button), "modifyuser"); if (modifyuser_check (window) == OK) if (modifyuser_commit (window) == OK) gtk_widget_destroy (window); } void on_modifygroup_okay_clicked (GtkButton * button, gpointer user_data) { GtkWidget *window = NULL; window = lookup_widget (GTK_WIDGET (button), "modifygroup"); if (modifygroup_check (window) == OK) if (modifygroup_commit (window) == OK) gtk_widget_destroy (window); } void on_givenname_changed (GtkEditable * editable, gpointer user_data) { //aqui y en la sig. funcion hay fuga de memoria en el strdelimit GtkEntry *cn, *sn, *givenname, *uid; gchar *text; gchar newdel = '_'; cn = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "cn")); sn = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "sn")); givenname = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "givenname")); uid = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "uid")); gtk_editable_delete_text (GTK_EDITABLE (cn), 0, -1); gtk_entry_set_text (cn, gtk_editable_get_chars (GTK_EDITABLE (givenname), 0, -1)); gtk_entry_append_text (cn, " "); gtk_entry_append_text (cn, gtk_editable_get_chars (GTK_EDITABLE (sn), 0, -1)); gtk_editable_delete_text (GTK_EDITABLE (uid), 0, -1); text = g_strdup (gtk_editable_get_chars (GTK_EDITABLE (givenname), 0, 1)); g_strdown (text); gtk_entry_set_text (uid, text); g_free (text); text = g_strdup (gtk_editable_get_chars (GTK_EDITABLE (sn), 0, -1)); g_strdown (text); text = g_strdelimit (text, G_STR_DELIMITERS, newdel); gtk_entry_append_text (uid, text); g_free (text); } void on_sn_changed (GtkEditable * editable, gpointer user_data) { GtkEntry *cn, *sn, *givenname, *uid; gchar *text; gchar newdel = '_'; cn = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "cn")); sn = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "sn")); givenname = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "givenname")); uid = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "uid")); gtk_editable_delete_text (GTK_EDITABLE (cn), 0, -1); gtk_entry_set_text (cn, gtk_editable_get_chars (GTK_EDITABLE (givenname), 0, -1)); gtk_entry_append_text (cn, " "); gtk_entry_append_text (cn, gtk_editable_get_chars (GTK_EDITABLE (sn), 0, -1)); gtk_editable_delete_text (GTK_EDITABLE (uid), 0, -1); text = g_strdup (gtk_editable_get_chars (GTK_EDITABLE (givenname), 0, 1)); g_strdown (text); gtk_entry_set_text (uid, text); g_free (text); text = g_strdup (gtk_editable_get_chars (GTK_EDITABLE (sn), 0, -1)); g_strdown (text); text = g_strdelimit (text, G_STR_DELIMITERS, newdel); gtk_entry_append_text (uid, text); g_free (text); } void on_uid_changed (GtkEditable * editable, gpointer user_data) { GtkEntry *homedirectory, *uid; homedirectory = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "homedirectory")); uid = GTK_ENTRY (lookup_widget (GTK_WIDGET (editable), "uid")); gtk_editable_delete_text (GTK_EDITABLE (homedirectory), 0, -1); gtk_entry_set_text (homedirectory, "/home/"); gtk_entry_append_text (homedirectory, gtk_editable_get_chars (GTK_EDITABLE (uid), 0, -1)); } gboolean on_druidpageessential_next (GnomeDruidPage * gnomedruidpage, gpointer arg1, gpointer user_data) { dir_entry*found; GtkWidget *window = lookup_widget (GTK_WIDGET (gnomedruidpage), "druid_new_user"); if (strlen (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "givenname")))) == 0) { gtk_widget_show (create_messagebox_with_message ("Please enter the first name")); return (TRUE); } if (strlen (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "sn")))) == 0) { gtk_widget_show (create_messagebox_with_message ("Please enter the last name")); return (TRUE); } if (strlen (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "cn")))) == 0) { gtk_widget_show (create_messagebox_with_message ("Please enter a common name for the user")); return (TRUE); } if (strlen (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "uid")))) == 0) { gtk_widget_show (create_messagebox_with_message ("Please enter a user ID")); return (TRUE); } if (strlen (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "userpassword")))) == 0 && strlen (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "userpasswordconfirm")))) == 0) { gtk_widget_show (create_messagebox_with_message ("You need to supply a password before continuing")); gtk_widget_grab_focus(lookup_widget(window,"userpassword")); return (TRUE); } if (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "userpassword"))) && gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "userpasswordconfirm"))) && strcmp (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "userpassword"))), gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "userpasswordconfirm")))) != 0) { gtk_widget_show (create_messagebox_with_message ("The passwords you entered do not match. Please check them.")); gtk_widget_grab_focus(lookup_widget(window,"userpassword")); return (TRUE); } if (preferences.avoidconflicts && preferences.avoidconflictscope == ENTIREDIR) { found = cached_dir_entries_getbyuid( gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "uid")) ) ); if (found) { gtk_widget_show (create_messagebox_with_message ("The user ID you typed already exists in the directory. Please choose another.")); return (TRUE); } } //gtk_widget_grab_focus (lookup_widget // (GTK_WIDGET (gnomedruidpage), "logontoallservers")); return (FALSE); } gboolean on_druidpageaccesscontrol_next (GnomeDruidPage * gnomedruidpage, gpointer arg1, gpointer user_data) { gtk_widget_grab_focus (lookup_widget (GTK_WIDGET (gnomedruidpage), "o")); return FALSE; } gboolean on_druidpageunixaccount_next (GnomeDruidPage * gnomedruidpage, gpointer arg1, gpointer user_data) { GtkWidget *window = lookup_widget (GTK_WIDGET (gnomedruidpage), "druid_new_user"); gdouble test; gchar *gidnumber = NULL; if (GTK_TOGGLE_BUTTON (lookup_widget (GTK_WIDGET (gnomedruidpage), "automaticuid"))->active == FALSE) { gidnumber = gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "uidnumber"))); test = g_strtod (gidnumber, NULL); if (strlen (gidnumber) == 0) { gtk_widget_show (create_messagebox_with_message ("Type a number in the UNIX UID number entry")); return (TRUE); } if (test == 0 && g_strcasecmp ("0", gidnumber) != 0) { gtk_widget_show (create_messagebox_with_message ("Invalid UNIX UID number")); return (TRUE); } } if (strlen (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "homedirectory")))) == 0) { gtk_widget_show (create_messagebox_with_message ("You need to supply a home directory")); return (TRUE); } //gtk_widget_grab_focus (lookup_widget // (GTK_WIDGET (gnomedruidpage), "enablesambaobjectclass")); return (FALSE); } void on_druidpagefinish3_finish (GnomeDruidPage * gnomedruidpage, gpointer arg1, gpointer user_data) { GtkWidget *window = lookup_widget (GTK_WIDGET (gnomedruidpage), "druid_new_user"); if (newuser_commit (gnomedruidpage) == OK) gtk_widget_destroy (window); } void on_uidnumber_map (GtkWidget * widget, gpointer user_data) { } void on_button_removeselection_clicked (GtkButton * button, gpointer user_data) { if (objectview_has_selection()) gtk_widget_show (create_deleteselection ()); } gboolean on_druidpagegroupinfo_next (GnomeDruidPage * gnomedruidpage, gpointer arg1, gpointer user_data) { dir_entry*found; GtkWidget *window = lookup_widget (GTK_WIDGET (gnomedruidpage), "druid_new_group"); gdouble test; gchar *gidnumber = NULL; if (strlen (gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "cn")))) == 0) { gtk_widget_show (create_messagebox_with_message ("Please enter a group name")); return (TRUE); } if (GTK_TOGGLE_BUTTON (lookup_widget (GTK_WIDGET (gnomedruidpage), "automaticgid"))->active == FALSE) { gidnumber = gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "gidnumber"))); test = g_strtod (gidnumber, NULL); if (strlen (gidnumber) == 0) { gtk_widget_show (create_messagebox_with_message ("Please type a particular ID")); return (TRUE); } if (test == 0 && g_strcasecmp ("0", gidnumber) != 0) { gtk_widget_show (create_messagebox_with_message ("Invalid UNIX GID number")); return (TRUE); } } if (preferences.avoidconflicts && preferences.avoidconflictscope == ENTIREDIR) { found = cached_dir_entries_getgroupbycn( gtk_entry_get_text (GTK_ENTRY (lookup_widget (window, "cn")) ) ); if (found) { gtk_widget_show (create_messagebox_with_message ("The group name you typed already exists in the directory. Please choose another.")); return (TRUE); } } //gtk_widget_grab_focus(lookup_widget(gnomedruidpage,"members")); return FALSE; } void on_button_new_group_clicked (GtkButton * button, gpointer user_data) { GtkWidget *mainwindow = NULL; if (connection_profile_is_connected (current_connection_profile)) { if (!cached_dir_entries_has_ous()) gtk_widget_show(create_messagebox_with_message("Your directory appears empty, or it does not have organizational units.\nPlease initialize your directory with the MigrationTools from PADL.com.")); else { mainwindow = create_druid_new_group (); gtk_widget_show (mainwindow); } } } void on_gidnumber_map (GtkWidget * widget, gpointer user_data) { } void on_druid_new_group_druid_cancel (GnomeDruid * gnomedruid, gpointer user_data) { gtk_widget_destroy (lookup_widget ((GtkWidget *) gnomedruid, "druid_new_group")); } void on_druidpagefinish4_finish (GnomeDruidPage * gnomedruidpage, gpointer arg1, gpointer user_data) { GtkWidget *window = lookup_widget (GTK_WIDGET (gnomedruidpage), "druid_new_group"); if (newgroup_commit (gnomedruidpage) == OK) gtk_widget_destroy (window); } void on_enablemailpolicycontrol_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_show (lookup_widget (GTK_WIDGET (togglebutton), "frame6")); gtk_widget_grab_focus(lookup_widget (GTK_WIDGET (togglebutton), "mailroutingaddressset")); } else { gtk_widget_hide (lookup_widget (GTK_WIDGET (togglebutton), "frame6")); } } void on_mailroutingaddressset_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "mailroutingaddress"), TRUE); gtk_widget_grab_focus(lookup_widget (GTK_WIDGET (togglebutton), "mailroutingaddress")); } else { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "mailroutingaddress"), FALSE); } } void on_mailhostset_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "mailhost"), TRUE); gtk_widget_grab_focus(lookup_widget (GTK_WIDGET (togglebutton), "mailhost")); } else { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "mailhost"), FALSE); } } void on_user_baseoudropdown_map (GtkWidget * widget, gpointer user_data) { gint i; GList* j; gchar* bestmatch = NULL; gchar* b; gchar *alternatives[] = { "People","User",NULL } ; GList * dnlist; GList*papa; g_print ("\ncalled: on_user_baseoudropdown_map\n"); dnlist = get_orgunit_dn_list_from_cache (); b = connection_profile_get_last_user_ou (connection_profile_list_getbyname (connection_profile_list, connection_profile_get_name (current_connection_profile))); gtk_combo_set_popdown_strings (GTK_COMBO (widget),dnlist); if (b) { papa = g_list_find_custom(dnlist,b,(GCompareFunc)g_strcasecmp); if (papa != NULL) gtk_entry_set_text (GTK_ENTRY(lookup_widget (widget, "baseou")),b); } else { // busquemos una buena alternativa for (i=0;alternatives[i];i++) for (j=dnlist;j;j=j->next) if (strstr((char*)j->data,alternatives[i]) != NULL) bestmatch = (char*)j->data; if (bestmatch) gtk_entry_set_text (GTK_ENTRY (lookup_widget (widget, "baseou")),bestmatch); } } void on_group_baseoudropdown_map (GtkWidget * widget, gpointer user_data) { gint i; GList* j; gchar* bestmatch = NULL; gchar* b; gchar *alternatives[] = { "Group",NULL } ; GList * dnlist; GList* papa; g_print ("\ncalled: on_group_baseoudropdown_map\n"); dnlist = get_orgunit_dn_list_from_cache (); b = connection_profile_get_last_group_ou (connection_profile_list_getbyname (connection_profile_list, connection_profile_get_name (current_connection_profile))); gtk_combo_set_popdown_strings (GTK_COMBO (widget),dnlist); if (b) { papa = g_list_find_custom(dnlist,b,(GCompareFunc)g_strcasecmp); if (papa != NULL) gtk_entry_set_text (GTK_ENTRY(lookup_widget (widget, "baseou")),b); } else { // busquemos una buena alternativa for (i=0;alternatives[i];i++) for (j=dnlist;j;j=j->next) if (strstr((char*)j->data,alternatives[i]) != NULL) bestmatch = (char*)j->data; if (bestmatch) gtk_entry_set_text (GTK_ENTRY (lookup_widget (widget, "baseou")),bestmatch); } } void on_automaticuid_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "uidnumber"), FALSE); } else { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "uidnumber"), TRUE); gtk_widget_grab_focus(lookup_widget (GTK_WIDGET (togglebutton), "uidnumber")); } } void on_automaticgid_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "gidnumber"), FALSE); } else { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "gidnumber"), TRUE); gtk_widget_grab_focus(lookup_widget (GTK_WIDGET (togglebutton), "gidnumber")); } } void on_loginshellsdropdown_realize (GtkWidget * widget, gpointer user_data) { gtk_combo_set_popdown_strings (GTK_COMBO (widget), preferences.logindefaults.shells); } void on_gidnumberdropdown_realize (GtkWidget * widget, gpointer user_data) { fill_groups_dropdown (widget); //setting default group g_print("Last group used: %s\n" ,preferences.userbox.lastgroup ); if (preferences.userbox.lastgroup && g_strcasecmp(preferences.userbox.lastgroup,"0") != 0) { gtk_entry_set_text ( GTK_ENTRY(lookup_widget(widget,"gidnumber")),preferences.userbox.lastgroup); } } gint on_deleteselection_closed (GnomeDialog * gnomedialog, gpointer user_data) { return (FALSE); } void on_okdeletion_click (GtkButton * button, gpointer user_data) { dir_entry *entry = NULL; GnomeIconList *itemlist = NULL; GList* dns = NULL; GList* sl = NULL; if (objectview_has_selection()) { itemlist = (GnomeIconList *) lookup_widget (GTK_WIDGET (app), "itemlist"); for (sl = itemlist->selection;sl;sl=sl->next) { entry = gnome_icon_list_get_icon_data (itemlist,GPOINTER_TO_INT (sl->data)); g_assert(dir_entry_get_dn(entry)); if (dir_entry_is_user(entry) ) { g_print("\n Inserting %s first into the delete list",dir_entry_get_dn(entry)); dns = g_list_prepend(dns,g_strdup(dir_entry_get_dn(entry))); } else { g_print("\n Appending %s first to the end of the delete list",dir_entry_get_dn(entry)); dns = g_list_append(dns,g_strdup(dir_entry_get_dn(entry))); } } if (app_delete_interactive(dns) == LDAP_SUCCESS) { gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "deleteselection")); } g_list_foreach(dns,(GFunc)g_free,NULL); g_list_free(dns); } } void on_canceldeletion_click (GtkButton * button, gpointer user_data) { // //gtk_signal_emit_by_name(GTK_OBJECT(lookup_widget(GTK_WIDGET(button),"deleteselection")),"close"); gtk_widget_destroy (lookup_widget (GTK_WIDGET (button), "deleteselection")); } void on_preferences_clicked (GnomeDialog * gnomedialog, gint arg1, gpointer user_data) { g_print ("\nClicked preferences - processing and closing dialog\n"); if (arg1 == 0) { //returns true in case everything went okay if (process_preferences_dialog (gnomedialog)) { save_prefs (); gtk_widget_destroy (GTK_WIDGET (gnomedialog)); } } else { gtk_widget_destroy (GTK_WIDGET (gnomedialog)); } } gint on_preferences_close (GnomeDialog * gnomedialog, gpointer user_data) { g_print ("\nClosed preferences\n"); return (TRUE); } gboolean on_preferences_delete_event (GtkWidget * widget, GdkEvent * event, gpointer user_data) { gtk_widget_destroy (widget); return FALSE; } void on_pass_crypt_map (GtkWidget * widget, gpointer user_data) { if (preferences.passwordcrypttype == CRYPT) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); } void on_pass_cleartext_map (GtkWidget * widget, gpointer user_data) { if (preferences.passwordcrypttype == CLEARTEXT) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); } void on_pass_md5_map (GtkWidget * widget, gpointer user_data) { if (preferences.passwordcrypttype == MD5) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); } void on_shadowmin_realize (GtkWidget * widget, gpointer user_data) { //pass_min_days char buf[32]; if (preferences.logindefaults.PASS_MIN_DAYS) { snprintf (buf, sizeof buf, "%d", preferences.logindefaults.PASS_MIN_DAYS); gtk_entry_set_text (GTK_ENTRY (widget), buf); } } void on_shadowmax_realize (GtkWidget * widget, gpointer user_data) { //pass_max_days char buf[32]; if (preferences.logindefaults.PASS_MAX_DAYS) { snprintf (buf, sizeof buf, "%d", preferences.logindefaults.PASS_MAX_DAYS); gtk_entry_set_text (GTK_ENTRY (widget), buf); } } void on_shadowwarning_realize (GtkWidget * widget, gpointer user_data) { //pass_warn_age char buf[32]; if (preferences.logindefaults.PASS_WARN_AGE) { snprintf (buf, sizeof buf, "%d", preferences.logindefaults.PASS_WARN_AGE); gtk_entry_set_text (GTK_ENTRY (widget), buf); } } void on_shadowinactive_realize (GtkWidget * widget, gpointer user_data) { //pass_inactive_age char buf[32]; if (preferences.logindefaults.PASS_INACTIVE_AGE) { snprintf (buf, sizeof buf, "%d", preferences.logindefaults.PASS_INACTIVE_AGE); gtk_entry_set_text (GTK_ENTRY (widget), buf); } } void on_shadowexpirecheck_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "shadowexpire"), TRUE); gtk_widget_grab_focus(lookup_widget (GTK_WIDGET (togglebutton), "shadowexpire")); } else { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "shadowexpire"), FALSE); } } void on_members_realize (GtkWidget * widget, gpointer user_data) { static GtkTargetEntry drop_types[] = { {"x-application/x-directoryadmin-group", 0, TARGET_GROUP_DN} }; g_print ("\nMember list realized - setting up drop properties\n"); gtk_drag_dest_set (widget, GTK_DEST_DEFAULT_ALL, drop_types, ELEMENTS (drop_types), GDK_ACTION_COPY); } void on_members_drag_data_received (GtkWidget * widget, GdkDragContext * drag_context, gint x, gint y, GtkSelectionData * data, guint info, guint time, gpointer user_data) { GtkCList *memberlist; gchar **row; gchar** uids; gchar* uid; int counter; gchar *received; received = (gchar*) data->data; g_print("\nThis data was received from %d: %s",info,received); uids = g_strsplit(received,"|",32767); memberlist = (GtkCList *) widget; for (counter=0;uids[counter];counter++) { uid = uids[counter]; row = g_new0(gchar*,3); row[0] = g_strdup(uid); if (row[0]) { gtk_clist_append (memberlist, row); } } g_strfreev(uids); return; } void focus_me (GtkWidget * widget, gpointer user_data) { gtk_widget_grab_focus (widget); } void on_new_user2_activate (GtkMenuItem * menuitem, gpointer user_data) { gtk_signal_emit_by_name (GTK_OBJECT (lookup_widget (GTK_WIDGET (menuitem), "button_new")), "clicked"); } void on_new_group1_activate (GtkMenuItem * menuitem, gpointer user_data) { gtk_signal_emit_by_name (GTK_OBJECT (lookup_widget (GTK_WIDGET (menuitem), "button_new_group")), "clicked"); } void on_modify1_activate (GtkMenuItem * menuitem, gpointer user_data) { /* gtk_signal_emit_by_name (GTK_OBJECT (lookup_widget (GTK_WIDGET (menuitem), "button_modifyselection")), "clicked");*/ } void on_remove1_activate (GtkMenuItem * menuitem, gpointer user_data) { gtk_signal_emit_by_name (GTK_OBJECT (lookup_widget (GTK_WIDGET (menuitem), "button_removeselection")), "clicked"); } void on_itemlist_select_icon (GnomeIconList * gnomeiconlist, gint arg1, GdkEvent * event, gpointer user_data) { gboolean found = FALSE; GList * wa; int duplicatedelement = -1; //g_print ("\n\nSelected icon %d",arg1); for (wa=gnomeiconlist->selection;wa;wa=wa->next) { if (found == TRUE && (int)wa->data == arg1) { g_print("\nFound duplicate selection. Killing."); duplicatedelement = arg1; break; } if ((int)wa->data == arg1) { found = TRUE; } } if (duplicatedelement > -1) gnomeiconlist->selection = g_list_remove(gnomeiconlist->selection,(gpointer)arg1); objectview_icon_dump_selections(gnomeiconlist); // gnome_icon_list_select_icon(gnomeiconlist,wa->data); if (objectview_has_selection()) app_enable_editing_controls(); } void on_itemlist_realize (GtkWidget * widget, gpointer user_data) { static GtkTargetEntry drag_types[] = { {"x-application/x-directoryadmin-group", 0, TARGET_GROUP_DN} }; g_print ("\nIcon list realized - setting up drag and drop\n"); gtk_drag_source_set (widget, GDK_BUTTON1_MASK, drag_types, ELEMENTS (drag_types), GDK_ACTION_COPY); } void on_itemlist_drag_data_get (GtkWidget * widget, GdkDragContext * drag_context, GtkSelectionData * data, guint info, guint time, gpointer user_data) { GnomeIconList *itemlist; int pos; dir_entry *entry = NULL; GList* iter = NULL; gchar* ttmp = NULL; gchar* tobsent = NULL; itemlist = (GnomeIconList *) widget; if (objectview_has_selection()) tobsent = g_strdup(""); g_print("\nNumber of icons selected: %d list length: %d", itemlist->icons,g_list_length(itemlist->selection) ); for (iter=itemlist->selection;iter;iter=iter->next) { pos = GPOINTER_TO_INT (iter->data); entry = gnome_icon_list_get_icon_data (itemlist, pos); /* g_print("\n Selected position: %d",pos); g_print("\n Selected DN: %s",dir_entry_get_dn(entry)); g_print("\n Selected UID: %s",dir_entry_get_uid(entry)); */ if (dir_entry_get_uid(entry)) { ttmp = tobsent; tobsent = g_strconcat(tobsent,dir_entry_get_uid(entry),"|",NULL); g_free(ttmp); } } g_print ("\nFinally sending: %s", tobsent); gtk_selection_data_set (data,data->target, strlen(tobsent), tobsent, strlen(tobsent)); } gboolean on_itemlist_button_press_event (GtkWidget * widget, GdkEventButton * event, gpointer user_data) { GtkWidget *scrolledwindow; scrolledwindow= lookup_widget(app,"itemlistscrolledwindow"); gtk_widget_grab_focus(scrolledwindow); icon_list_click_event ((GnomeIconList *) widget, event, user_data); return FALSE; } void on_druid_firsttime_druid_cancel (GnomeDruid * gnomedruid, gpointer user_data) { gtk_widget_destroy (lookup_widget ((GtkWidget *) gnomedruid, "druid_firsttime")); } void on_finish_finish (GnomeDruidPage * gnomedruidpage, gpointer arg1, gpointer user_data) { connection_profile *newone; gchar *nombrecitocojudo; GtkWidget *button; button = (GtkWidget *) gnomedruidpage; nombrecitocojudo = gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_profile_name")); if (strlen (nombrecitocojudo) == 0) { gtk_widget_show (create_messagebox_with_message ("You need to supply a profile name")); return; } nombrecitocojudo = gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_server")); if (strlen (nombrecitocojudo) == 0) { gtk_widget_show (create_messagebox_with_message ("You need to supply a server address")); return; } nombrecitocojudo = gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_profile_name")); if (connection_profile_list_getbyname (connection_profile_list, nombrecitocojudo) != NULL) { // g_print("\nItem was found on the list. Not admissible."); gtk_widget_show (create_messagebox_with_message ("An entry with this name already exists")); return; } newone = connection_profile_new (gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_profile_name")), gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_dn")), gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_pw")), gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_server")), gtk_toggle_button_get_active ((GtkToggleButton *) lookup_widget ((GtkWidget *) button, "entry_login_tls")), gtk_entry_get_text ((GtkEntry *) lookup_widget ((GtkWidget *) button, "entry_login_treeroot"))); connection_profile_list = connection_profile_list_add (connection_profile_list, newone); while (button->parent != NULL) button = button->parent; /* button = lookup_widget ((GtkWidget *) button, "druid_new_profile"); if (button == NULL) button = lookup_widget ((GtkWidget *) button, "druid_firsttime"); */ if (gtk_object_get_user_data ((GtkObject *) button)) list_profiles_fill (gtk_object_get_user_data ((GtkObject *) button)); gtk_widget_destroy (button); } void on_rfc2307bis_map (GtkWidget * widget, gpointer user_data) { if (preferences.rfc2307bis == FALSE) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE); } void on_enablesambaobjectclass_toggled (GtkToggleButton * togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON ((GtkToggleButton *) togglebutton)->active) { g_print ("Samba activado\n"); gtk_widget_show (lookup_widget (GTK_WIDGET (togglebutton), "framesamba")); gtk_widget_grab_focus(lookup_widget (GTK_WIDGET (togglebutton), "smbHome")); } else { g_print ("Samba desactivado\n"); gtk_widget_hide (lookup_widget (GTK_WIDGET (togglebutton), "framesamba")); } } gboolean on_itemlist_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { // g_print("\nTecla %d (%s) releaseada",event->keyval,event->string); return FALSE; } gboolean on_itemlist_key_release_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { // g_print("\nTecla %d (%s) releaseada",event->keyval,event->string); return FALSE; } gboolean on_itemlist_client_event (GtkWidget *widget, GdkEventClient *event, gpointer user_data) { g_print("\nClient event"); return FALSE; } void on_button_refresh_clicked (GtkButton *button, gpointer user_data) { app_refresh(); } gboolean on_mainwindow_client_event (GtkWidget *widget, GdkEventClient *event, gpointer user_data) { g_print("\nClient event"); return FALSE; } gboolean on_mainwindow_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { gboolean r; r =objectview_keypress(event); if (r) {g_print("Key processed - not allowing it to bubble up into the UI\n\n");return TRUE; } return FALSE; } gboolean on_mainwindow_key_release_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { // g_print("\nTecla %d (%s) releaseada",event->keyval,event->string); return FALSE; } void on_itemlist_unselect_icon (GnomeIconList *gnomeiconlist, gint arg1, GdkEvent *event, gpointer user_data) { //g_print ("\n\nUnselected icon %d",arg1); objectview_icon_dump_selections(gnomeiconlist); if (objectview_has_selection() == FALSE) { app_disable_editing_controls(); } } void on_invcredok_clicked (GtkButton *button, gpointer user_data) { gchar * name; connection_profile * a; name = gtk_object_get_user_data((GtkObject*)lookup_widget ((GtkWidget *) button, "invalidcredentials")); g_print(name); a= connection_profile_list_getbyname (connection_profile_list, name); connection_profile_set_dn(a, gtk_entry_get_text((GtkEntry*)lookup_widget ((GtkWidget *) button, "userid"))); connection_profile_set_password(a, gtk_entry_get_text((GtkEntry*)lookup_widget ((GtkWidget *) button, "password"))); gtk_widget_destroy (lookup_widget ((GtkWidget *) button, "invalidcredentials")); gtk_signal_handler_block_by_func ( GTK_OBJECT(lookup_widget (app, "button_connect")), (GtkSignalFunc)on_button_connect_toggled, NULL); gtk_toggle_button_set_active ((GtkToggleButton *) lookup_widget (app, "button_connect"), TRUE); gtk_signal_handler_unblock_by_func ( GTK_OBJECT(lookup_widget (app, "button_connect")), (GtkSignalFunc)on_button_connect_toggled, NULL); app_connect(name); g_free(name); } void on_button45_clicked (GtkButton *button, gpointer user_data) { gchar * name; name = gtk_object_get_user_data((GtkObject*)lookup_widget ((GtkWidget *) button, "invalidcredentials")); gtk_toggle_button_set_active ((GtkToggleButton *) lookup_widget (app, "button_connect"), FALSE); g_free(name); gtk_widget_destroy (lookup_widget ((GtkWidget *) button, "invalidcredentials")); } void on_selectuser_members_realize (GtkWidget *widget, gpointer user_data) { GList* eligibles=NULL; GtkCList*d; GtkCList*parentlist; char* row[2]; char*name; gint currow; gboolean found; char*dn; GList*l=NULL; dir_entry* currentry; GtkEntry* textbox; gchar* filter; gchar*tempname; //gchar*tempneedle;gchar*temphaystack; row[1]=NULL; d=(GtkCList*)lookup_widget(widget,"members"); parentlist=(GtkCList*)lookup_widget(widget,"selectuser"); parentlist=gtk_object_get_user_data((GtkObject*)parentlist); textbox = (GtkEntry*)lookup_widget(widget,"filter"); //collect eligibles g_print("\nClearing list...\n"); gtk_clist_clear(d); g_print("\nSelecting eligibles...\n"); for (l=g_list_first(cached_dir_entries);l;l=l->next) { g_assert(l->data); currentry = l->data; if(dir_entry_is_user(currentry)) { g_print("Found user %s\n",dir_entry_get_name(currentry)); //loop through the list to find out whether there is such item found = 0; for (currow=parentlist->rows - 1;currow>=0;currow --) { // g_print(" Comparing against %s...",gtk_clist_get_row_data(parentlist,currow)); if (g_strcasecmp(gtk_clist_get_row_data(parentlist,currow),currentry->dn) == 0) { found = 1; g_print(" Match! Appending to list since not found yet on current user list\n"); } g_print("\n"); } if (found == 0) eligibles=g_list_append(eligibles,currentry); } } //save the eligibles list on the members list of this window g_print("Saving the eligibles...\n"); gtk_object_set_user_data((GtkObject*)d,eligibles); //fill the list for the first time with eligibles filter = gtk_entry_get_text(textbox); if (strlen(filter) < 1 ) filter = NULL; if (filter) { filter = g_strdup(filter);g_strdown(filter); } g_print("Filling list with eligibles...\n"); for (l=g_list_first(eligibles);l;l=l->next) { dn=g_strdup(dir_entry_get_dn(l->data)); g_assert(dn); name=dir_entry_get_name(l->data); if (name) name=g_strconcat(name, " (",dn,")",NULL); else name=g_strdup(dn); tempname = name; g_assert(name); g_print("Name before lowercasing: %s\n",name); tempname = g_strdup(name); g_strdown(tempname); g_print("Name after lowercasing: %s\n",tempname); if (filter == NULL || strstr(tempname,filter) != NULL) { if (filter) g_print("Filter matched: %s\n",filter); else g_print("No filter, appending to list anyway\n"); row[0] = name; currow = gtk_clist_append(d,row); gtk_clist_set_row_data(d,currow,dn); } g_free(tempname); /* g_free(dn); g_free(name);*/ } g_free(filter); gtk_clist_columns_autosize(d); } void on_selectuser_combofilter_map (GtkWidget * widget, gpointer user_data) { //gint i; GList * dnlist; GtkEntry*m; dnlist = get_orgunit_dn_list_from_cache (); gtk_combo_set_popdown_strings (GTK_COMBO (widget),dnlist); m=(GtkEntry*)lookup_widget(widget,"filter"); gtk_entry_set_text(m,""); } void on_connect1____activate (GtkMenuItem *menuitem, gpointer user_data) { gtk_toggle_button_set_active ((GtkToggleButton*)lookup_widget(app,"button_connect"), TRUE); } void on_disconnect1_activate (GtkMenuItem *menuitem, gpointer user_data) { gtk_toggle_button_set_active ((GtkToggleButton*)lookup_widget(app,"button_connect"), FALSE); } void on_manage_profiles1_activate (GtkMenuItem *menuitem, gpointer user_data) { gtk_widget_show (create_preferences ()); } void on_refresh1_activate (GtkMenuItem *menuitem, gpointer user_data) { app_refresh(); } void on_entry_login_tls_released (GtkButton *button, gpointer user_data) { # ifndef HAVE_TLS gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lookup_widget (button, "entry_login_tls")), FALSE); g_print("TLS was not found by configure to be supported by "); g_print("your ldap libraries.\n"); gtk_widget_show (create_messagebox_with_message ("TLS was not found by configure to be supported by your ldap libraries.")); # endif } gboolean on_modifyuser_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { modifyuser_keypress(widget,event); return TRUE; } gboolean on_modifygroup_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { modifygroup_keypress(widget,event); return TRUE; } gboolean on_druid_new_group_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { newgroup_keypress(widget,event); return FALSE; } gboolean on_druidpagegroupstart_next (GnomeDruidPage *gnomedruidpage, gpointer arg1, gpointer user_data) { gtk_widget_grab_focus(lookup_widget((GtkWidget*)gnomedruidpage,"cn")); return FALSE; } gboolean on_druid_new_user_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { newuser_keypress(widget,event); return FALSE; } void on_druid_new_user_show (GtkWidget *widget, gpointer user_data) { /// kill default accelerators GSList*accel ; accel = gtk_accel_groups_from_object(GTK_OBJECT(widget)); gtk_accel_group_unref(accel->data); gtk_window_remove_accel_group((GtkWindow*)widget,accel->data); } gboolean on_druidpagestart3_next (GnomeDruidPage *gnomedruidpage, gpointer arg1, gpointer user_data) { gtk_widget_grab_focus (lookup_widget (GTK_WIDGET (gnomedruidpage), "givenname")); return FALSE; } gboolean on_druidpageorginfo_next (GnomeDruidPage *gnomedruidpage, gpointer arg1, gpointer user_data) { gtk_widget_grab_focus (lookup_widget (GTK_WIDGET (gnomedruidpage), "mail")); return FALSE; } gboolean on_druidpagemail_next (GnomeDruidPage *gnomedruidpage, gpointer arg1, gpointer user_data) { gtk_widget_grab_focus (lookup_widget (GTK_WIDGET (gnomedruidpage), "homedirectory")); return FALSE; } gboolean on_druidpagesamba_next (GnomeDruidPage *gnomedruidpage, gpointer arg1, gpointer user_data) { gtk_widget_grab_focus (lookup_widget (GTK_WIDGET (gnomedruidpage), "shadowmin")); return FALSE; } gboolean on_invalidcredentials_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { if (event->keyval == 65293 || event->keyval == 65421) { gtk_button_clicked ( (GtkButton*)lookup_widget(widget,"invcredok") ); } return FALSE; } void on_seleccionar_todo_activate (GtkMenuItem *menuitem, gpointer user_data) { objectview_select_all(); } void on_deseleccionar_todo_activate (GtkMenuItem *menuitem, gpointer user_data) { objectview_clear_selection(); } void on_druid_new_user_druid_realize (GtkWidget *widget, gpointer user_data) { // now it's time to load defaults for the new user. if (preferences.userbox.sambaused) { gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(widget,"enablesambaobjectclass"),TRUE); } else { gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(widget,"enablesambaobjectclass"),FALSE); } } void on_filterbutton_clicked (GtkButton *button, gpointer user_data) { objectview_fill(); } void on_filterclear_clicked (GtkButton *button, gpointer user_data) { gtk_entry_set_text(GTK_ENTRY(lookup_widget(app,"filter")),""); objectview_fill(); } void on_avoidconflicts_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if (GTK_TOGGLE_BUTTON (togglebutton)->active) { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "frame_avoidconflictoptions"),TRUE); /* If control reaches here, the toggle button is down */ } else { gtk_widget_set_sensitive (lookup_widget (GTK_WIDGET (togglebutton), "frame_avoidconflictoptions"),FALSE); /* If control reaches here, the toggle button is up */ } } void on_preferences_show (GtkWidget *widget, gpointer user_data) { //now here we're supposed to load preference values into the dialog box fill_prefsdialog(widget); }